gpt4 book ai didi

java - AES解密始终为空

转载 作者:行者123 更新时间:2023-12-02 07:26:30 28 4
gpt4 key购买 nike

我尝试使用 salt 来解密 AES 加密消息,但它始终返回 null 值。谁能看看我哪里做错了?

public static String decryptMessage(String encryptedMessage, String salt) {

String decryptedMessage = null;
String valueToDecrypt = encryptedMessage;
try {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);


for (int i = 0; i < ITERATIONS; i++) {
byte[] decodedValue = Base64.decodeBase64(valueToDecrypt);
byte[] decVal = c.doFinal(decodedValue);
decryptedMessage = new String(decVal).substring(salt.length());
valueToDecrypt = decryptedMessage;
}


} catch (Exception e) {
e.printStackTrace();

}
return decryptedMessage;
}

**EDIT:**

这是我认为有效的相应加密方法。

private static final String ALGORITHM = "AES";
private static final int ITERATIONS = 5;
private static final byte[] keyValue = new byte[] { '1', '2', '3', '4',
'5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6' };


public static String encryptMessage(String message, String salt) {
String encMessage = null;
byte[] encVal = null;
String messageWithSalt = null;
try {
Key key = generateKey();

Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.ENCRYPT_MODE, key);

for (int i = 0; i < ITERATIONS; i++) {
messageWithSalt = salt + encMessage;
encVal = c.doFinal(messageWithSalt.getBytes());
byte[] encryptedValue = new Base64().encode(encVal);
encMessage = new String(encryptedValue);
}

} catch (Exception e) {
e.printStackTrace();

}
return encMessage;
}

PS:迭代不为0;

最佳答案

我认为你的方法可能长期被破坏或命名错误。每次解密时都会生成一个 key ,而您应该拥有一个与加密所用 key 相匹配的预先存在的 key 。

您还传递一个“盐”值 - 注意:这是一个通常为哈希保留的术语 - 然后您完全忽略它,除了使用大小作为结果的截断长度。

当然,我在上面看到的并没有以合理的方式解密任何内容。如果您可以准确描述您想要实现的目标,我们可能会更正代码或为您指出执行该任务的同行评审方法(该方法可能已在标准库中实现)。

关于java - AES解密始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13514256/

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