gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:45:02 24 4
gpt4 key购买 nike

我正在尝试将一个字节数组存储到 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

另外,正如评论部分中提到的,我尝试将其转换为字符串并将其存储在数据库中,然后解密它,但我得到了相同的错误。

我什至尝试过使用 SHA-256 进行哈希处理,但我正在检索的字节数组与最初的字节数组完全不同

我正在使用的变量

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");

最佳答案

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

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

关于java - 尝试使用Java将加密的AES数据存储到mySQL数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35089759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com