Java MD5加密减去字节阵列中的值



你好,我正在使用以下代码来加密字符串。我发现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,23,-101,108,-122,27,27,27,20,-124]

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

这是因为签署了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);

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

java中的字节类型的范围从-128到 127,这可能有些令人惊讶 - 许多人认为字节不签名,但是Java没有未签名的数字类型。

最新更新