1

RSA加密后我有一个十六进制字符串。当我将其转换为字节 [] 时,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;
}

请有任何建议。

4

1 回答 1

1

加密方式要求输入是固定长度的;您将不得不将填充添加到所需的长度以避免此异常。此大小将取决于密钥大小。

编辑:在您的迭代中还有一个潜在的错误data:如果它的长度不能被 2 整除,那么第二个i++将导致IndexOutOfBoundsException. 你最好在循环中增加i2并在访问数据时使用and :for[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));
}
于 2011-10-14T13:43:55.267 回答