gpt4 book ai didi

从数据库获取 KEY 时出现 java.security.InvalidKeyException : Unsupported key.

转载 作者:行者123 更新时间:2023-12-01 12:04:16 29 4
gpt4 key购买 nike

我已将 key 存储在数据库中并获取 key 进行加密,我遇到异常

异常

java.security.InvalidKeyException: Unsupported key  Note: Key is not in encrypted format.
Fetched Key from DB de.flexiprovider.core.rijndael.RijndaelKey@c4ef71c9
invalid Key javax.crypto.spec.SecretKeySpec@97d5a10e // we can see here key is changed

计划

StringBuffer sbselect1=new StringBuffer();
sbselect1.append("SELECT Keyforkey FROM ");
sbselect1.append(UserConstants.USER_DETAILS_TABLE_NAME2);
sbselect1.append(" where ID=2");
ps1=conn.prepareStatement(sbselect1.toString());
ResultSet rs =ps1.executeQuery();
rs.next();
String keyskey = rs.getString("KeyforKey");
System.out.println("Fetched Key from DB "+keyskey);
Security.addProvider(new FlexiCoreProvider());
Cipher cipher2 = Cipher.getInstance("AES128_CBC", "FlexiCore");
// byte[] encodedKey =keyskey.getBytes();
SecretKey key2 = new SecretKeySpec(keyskey.getBytes(), 0, keyskey.length(), "AES");
System.out.println("invalid Key "+ key2);
rs.close();

这段代码我出错了

SecretKey key2 = new SecretKeySpec(keyskey.getBytes(), 0,  keyskey.length(), "AES");

并且还在 byte[]encodedKey =keyskey.getBytes();输出为 [B@117e4ff

请帮我解决问题。

最佳答案

如果我们需要人类可读的 key ,我们通常以十六进制或 Base64 字符串格式存储 key 。假设您将十六进制格式的 key 存储到数据库中,则不应使用 keyskey.getBytes() 获取字符串的字节,而是使用以下算法获取它们(取自 here与其他十六进制到字节的解决方案相比,它的工作速度相当快):

public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}

如果您使用 Base64 格式,请执行与上述类似的操作,请参阅 here .

关于从数据库获取 KEY 时出现 java.security.InvalidKeyException : Unsupported key.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27752419/

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