gpt4 book ai didi

java - 将十六进制字符串转换为字节数组以进行 RSA 解密

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:47 25 4
gpt4 key购买 nike

我有一个 RSA 加密后的十六进制字符串。当我将其转换为 byte[] 时,RSA 解密给出 javax.crypto.BadPaddingException: Blocktype Mismatch: 0

我正在使用这种方法进行转换(在堆栈溢出本身上得到它)

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

请提出任何建议。

最佳答案

加密方式要求输入为固定长度;为了避免这种异常,您必须将填充添加到所需的长度。该大小将取决于 key 大小。

编辑:data的迭代中还存在一个潜在的错误:如果其长度不能被2整除,那么第二个i++将导致IndexOutOfBoundsException。您最好在 for 循环中将 i 增加 2,并在访问数据时使用 [i][i+1]:

for (int i = 0; i + 1 < data.length(); i += 2, k++)
{
results[k] = (byte) (Character.digit(data.charAt(i), 16) << 4);
results[k] += (byte) (Character.digit(data.charAt(i + 1), 16));
}

关于java - 将十六进制字符串转换为字节数组以进行 RSA 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7762709/

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