android密码dofinal数组太大了

时间:2013-11-11 16:26:37

标签: java android rsa encryption jce

我正在编写一个用于跟踪密码的Java程序的Android版本。

我使用以下函数来解码一行加密数据:

public String decrypt(String text) {
    byte[] decryptedText = null;
    String rtn = "";
    String[] byteValues = text.substring(1, text.length() - 1).split(",");
    byte[] bytes = new byte[byteValues.length];
    for (int i=0, len=bytes.length; i<len; i++) {
        bytes[i] = Byte.valueOf(byteValues[i].trim());     
    }
    try {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        decryptedText = cipher.doFinal(bytes);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    if (decryptedText != null) {
        try {
            rtn = new String(decryptedText, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    return rtn;
}

ALGORITHM设置为:

public static final String ALGORITHM = "RSA";

输入文本看起来像这样(有128个值):

[12, -27, -31, 2, -65, -119, -104, -9, -42, 6, -32, -116, 35, 14, -30, -51, 117, 21, -33, -98, 21, 41, -11, 118, 85, -46, -67, -19, 47, -10, -42, -18, -116, 87, 49, 76, 25, 114, 88, -100, 41, 74, -70, 73, -103, 78, 117, 123, 127, -4, 98, -6, -124, -69, -112, -51, 27, 46, -83, 5, -84, 22, -64, -92, 15, -85, 34, -44, -50, 28, -69, 28, 106, -75, -7, 63, 112, 22, 112, -85, -28, 29, 97, -51, 112, -52, -2, 60, -55, -57, 41, 78, -90, -55, -1, -128, 12, 10, 73, -95, -105, 38, -125, 123, 89, 35, 63, 100, 124, 64, -4, 11, -50, -100, -81, -66, -64, 94, -93, -72, 67, 3, 22, -126, -125, 24, 127, -74]

当我将此函数作为Java程序(Jave 1.6和1.7)的一部分运行时,我会按预期返回原始字符串。但是,当我作为我的Android应用程序的一部分运行时,decryptedText数组,而不是大约30的长度,总是有127的长度。结果返回字符串在前面有各种各样的垃圾字符,但最后一部分字符串是正确解码的文本。

我应该在Android上以不同于Java的方式调用doFinal吗?

1 个答案:

答案 0 :(得分:1)

问题是ALGORITHM的设置。当我把它更改为:

public static final String ALGORITHM = "RSA/ECB/PKCS1Padding";

一切都很好。