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;
}
请提出任何建议。
答案 0 :(得分:1)
加密方法要求输入为固定长度;您将不得不添加填充到所需的长度,以避免此异常。此大小取决于密钥大小。
编辑:data
的迭代中也存在潜在错误:如果其长度不能被2整除,那么第二个i++
将导致IndexOutOfBoundsException
。您最好在i
循环中将for
递增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));
}