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

时间:2011-10-14 03:21:14

标签: java type-conversion rsa encryption hexdump

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;
}

请提出任何建议。

1 个答案:

答案 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));
}