openssl md5 加密与java实现或者网上其他实现不一致的问题

笔者通过使用openssl工具的时候发现openssl的加密比较奇怪,和很多其他加密工具不一致。

比如对123进行加密

java实现如下:

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {

    public static String encryptToMD5(String str) {
        byte[] byteArray = null;
        try {
            //得到一个MD5的消息摘要
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            //添加要进行计算摘要的信息
            messageDigest.update(str.getBytes());
            //得到该摘要
            byteArray = messageDigest.digest();
        } catch
                (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        // 将摘要转为字符串 返回
        BigInteger bigInt = new BigInteger(1, byteArray);
        return bigInt.toString(16);
    }

    public static void main(String[] args) {
        String str = "123";
        String s = encryptToMD5(str);
        System.out.println("s = " + s);
    }
}

s = 202cb962ac59075b964b07152d234b70

而在openssl中发现

image.png

和期望的不一致!!!

很是纳闷,然后通过搜索引擎找到几个网站

https://md5jiami.51240.com/

http://tool.chinaz.com/tools/md5.aspx

openssl md5 加密与java实现或者网上其他实现不一致的问题_第1张图片
123 加密成md5

加密结果和我的都一致,为什么openssl的和我的不一致呢?

后来找到一篇文章,发现是因为

echo 123| openssl md5

命令把回车也当做一个字符进行了加密

解决方法是echo -n 123 | openssl md5

echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。

而这就是最大的元凶!!

最后看一下结果,哈哈,问题解决!


openssl md5

参考文章:

官网文档
Linux下使用MD5加密BASE64加密
echo命令

你可能感兴趣的:(openssl md5 加密与java实现或者网上其他实现不一致的问题)