gpt4 book ai didi

java - 填充加密的 key 长度不正确

转载 作者:行者123 更新时间:2023-12-01 09:57:27 25 4
gpt4 key购买 nike

我在进行填充加密时遇到了问题。我想我已将问题隔离到此函数:

static String AESEncryptStringWithPassword(String s, String p) throws...{
//function to create key from string password
SecretKey secret = deriveAESKey(p);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] ciphertext = cipher.doFinal(s.getBytes(Charset.forName("UTF-8")));
String str = Base64.getEncoder().encodeToString(ciphertext);
return str;

}

当我去解密时,我会收到如下错误:使用填充密码解密时,输入长度必须是 16 的倍数。

我已经检查过,这个方法是错误长度字符串的起源。没有进一步的方法会破坏它。我不确定我到底做错了什么。我的代码基于这里的问题:Java 256-bit AES Password-Based Encryption

编辑:我稍微更改了编码以使用 String(byte[], charset) 代替。但是现在使用 defaultcharset 我有一个适当的字符串长度,而使用 utf-8 则没有。

最佳答案

整个程序中 byte[] 和 String 之间的转换似乎是问题所在。尽可能将其保留为 byte[],然后就可以了。

所以,吸取了教训:在 byte[] 和 String 之间小心转换。

关于java - 填充加密的 key 长度不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37076126/

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