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

标签 java encryption arrays md5 message-digest

您好,我正在使用以下代码来加密字符串。 我发现 MD5 make 在 -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]

最佳答案

这是因为 byte Java 中的类型(与几乎所有其他类型一样)是有符号的,这意味着它的范围是 -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 MD5加密减去字节数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30161424/

相关文章:

java - Maven测试后删除资源

php - Mysql数据加密

Android JSONArray 循环

linux - 使用 openssl 和 dmsetup 在 CBC 模式下使用 AES 加密的垃圾字符

java - 简单的密码和 I/O

php - 如何使用 PHP 将原始 json 字符串存储在 cookie 中?

javascript - 获取屏幕大小以选择匹配的标题图片

java - Spring 内置了哪些属性类型转换器?

java - Java 中的动态方法绑定(bind)

java - pom.xml 中的错误 - 无法传输 org.jacoco jacoco-maven-plugin