当前位置: 首页 > 知识库问答 >
问题:

尝试用Java将加密的AES数据存储到mySQL数据库中

羿博延
2023-03-14

我正在尝试将一个字节数组存储到mySQL中,其中包含加密的“密码”。我尝试过使用Blob和varbinary数据类型,但是当我提取加密的数据时,它似乎没有被正确解密,因为存储的字节数组与我开始使用的字节数组不同。

下面的加密/解密代码

   public byte[] encrypt(String password){
    byte[] encrypted = null;
    try {
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);
        encrypted = cipher.doFinal(password.getBytes());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return encrypted;
}

public String decrypt(byte[] encrypted){
    String decrypted = null;
    try {
        cipher.init(Cipher.DECRYPT_MODE, aesKey);
        decrypted = new String(cipher.doFinal(encrypted));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return decrypted;
}

我已经打印出字节数组,看看是否存在差异,正如您可以看到的,在转换到数据库时,它确实发生了变化,我不确定如何克服这个问题

字节数组输出(上为原始字节数组,下为来自数据库)

84-48-4282-15-60-21-38-41944477106182
916664495599545657505332
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decryption with padded cipher
byte[] pa = p.hashPass("Hello World");
byte[] dbp = null;

这是我用来存储/获取数据的语句

Statement stmt = conn.createStatement();
stmt.execute("INSERT INTO staffaccounts(`ID`, `UserName`, `Password`, `Salt`) VALUES (NULL, 'admin', '"+pa+"', '')");
ResultSet rs = stmt.executeQuery("SELECT * FROM staffaccounts");
rs.next();
dbp = rs.getBytes("password");

共有1个答案

柯瀚玥
2023-03-14

这里的问题是您插入的是byte[].toString()返回的值,它不是字节数组的内容。

您应该通过PreparedStatement中的位置参数来完成此操作。永远不要将值连接到SQL语句中。

 类似资料:
  • 我的PHP网站有以下内容: > 启用SSL Cookie: 传输时的密码SHA512,然后是password_hash(),最后是PASSWORD_BCRYPT 我现在希望使用AES_Encrypt函数加密敏感数据,方法是将用于加密和解密的$key存储在webroot目录之外。 这可能会存储病人的数据,我所拥有的是否足够安全? 问题: 当您插入/更新时,您是如何清理输入的?如果您使用的是准备好的语

  • 我的测试 在这个测试中,encrypt方法被命中两次。 尝试创建Expect时 在webclient.getwebrourge(transactionId)内部 不同之处在于当使用这两次时,它返回两个不同的值,测试失败。但是当使用时(没有IV),它两次返回相同的值。 我的问题是如何使用“AES/GCM/Nopadding”测试这个RESTendpoint?

  • 问题内容: 有人可以告诉我,在以下情况下如何进行? 接收文件(MS文件,ODS,PDF) 通过Apache Tika提取公元核心元数据+通过jackrabbit-content-extractors提取内容 使用Jackrabbit将文档(内容)及其元数据存储到存储库中 ? 检索文档+元数据 我对第3点和第4点感兴趣… 详细信息:该应用程序正在以交互方式处理文档(一些分析-语言检测,单词计数等。+

  • 我试图存储多个数据到我的数据透视表。我有分类用户表category_id和user_id。这是我的店铺功能。 在blade中,我有name=“categoryId[]”和name=“userId[]”。但它只存储一个类别id。我做错了什么?

  • 正如标题所说,当我将spring数据rest存储库添加到现有的spring数据rest webmvc项目中时,我开始在项目运行中出错。 我试图使用@ConvertBy(MyConverter.class)在实体中遵循此链接进行嵌入ID转换。然而,仅仅添加jar就会导致以下错误和大量o. s. c. i. s. PathMatchingResourcePatterResolver日志。

  • 问题内容: 我不敢相信我无法做到这一点,但我希望能够将当前日期和时间从php存储到mysql表中。 表中的列是类型datetime。我已经试过了 但是我的时间戳记为0000-00-00 00:00:00 这一定很容易做到,但我无法使其正常运行!我想使用来自php的时间戳,而不是使用mysql now()函数 问题答案: 不要将其另存为Unix Timestamp(输出),而是另存为DATETIME