java MD5加密减去字节数组中的值

时间:2015-05-11 07:02:39

标签: java encryption bytearray md5 message-digest

您好我使用下面的代码来加密字符串。 我发现MD5的工作在-127 - +128值。

我正在减去价值。

public static void main(String[] args) throws Exception {
        String message = "smile";

        encrypt("Jack the Bear");
    }

    public static void encrypt(String password) throws Exception {

      byte byteData[] =null;

     MessageDigest md = null;
       try {
         md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes("US-ASCII"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

      byteData = md.digest();
      System.out.println(Arrays.toString(byteData));


    }

我的输出:[101,23,66,106,91,-51,6,119,-13,23,-101,108,-122,27,20,-124]

实际输出:[101,23,66,106,91,205,6,119,243,23,155,108,134,27,20,132]

2 个答案:

答案 0 :(得分:3)

这是因为Java中的byte类型(几乎所有其他类型)都已签名,这意味着它的范围为-128..127

如果您想将此范围转换为无符号范围(0..255),请执行以下操作:

byte b = -2;
int i = b & 0xff;

打印您的结果byteData,如下所示:

for (byte b : byteData)
    System.out.print((b & 0xff) + " ");

如果要以十六进制格式打印结果:

for (byte b : byteData)
    System.out.printf("%02x ", b);

答案 1 :(得分:1)

您的摘要计算正确,负字节值没有错误。

Java中的字节类型范围从-128到+127,这可能有点令人惊讶 - 许多人认为字节是无符号的,但Java没有无符号数字类型。