MD5

作者: 江河湖海琴瑟琵琶 | 来源:发表于2020-09-22 18:01 被阅读0次

最近接触java,需要用md5加密一个字符串,找了半天没找到现成的方法,
自己实现 #(错误示例)

        String str = "1234567890";//目标
        MessageDigest instance;
        try {
            //获取 MD5实例
            instance = MessageDigest.getInstance("MD5");
            //str.getBytes() 获取目标的字节数组
            //instance.digest() 加密方法 ,会返回一个有16个元素的字节数组
            byte[] byteArray = instance.digest(str.getBytes());
            
            StringBuffer result = new StringBuffer();
            //遍历加密结果
            for (byte b : byteArray) {
                //每个字节转成两个十六进制数
                result.append(Integer.toHexString(b & 0xFF));
            }
            System.out.println(result);
            //结果 e87f1fcf82d132f9bb018ca6738a19f
            //正确 e807f1fcf82d132f9bb018ca6738a19f
            
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

坑爹的输出结果竟然是31位,明显不对

分析

问题出在把字节转成两个十六进制数的时候.
转换后十六进制的 07 在拼接时 0 会被舍去. 所以少了一位.

解决

转换时判断长度,小于2位在前边补0
最终代码如下

public void test() {

        String str = "1234567890";
        MessageDigest instance;
        try {
            
            instance = MessageDigest.getInstance("MD5");
            byte[] byteArray = instance.digest(str.getBytes());
            StringBuffer result = new StringBuffer();
        
            for (byte b : byteArray) {
                result.append(
                         //小于2位在前边补0
                         (Integer.toHexString(b & 0xFF).length() == 2 ) ?
                                 Integer.toHexString(b & 0xFF) :
                                    '0' + Integer.toHexString(b & 0xFF)  
                        );
            }
            System.out.println(result);
            //e807f1fcf82d132f9bb018ca6738a19f
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

php中只要调用一个方法

<?php
echo md5('1234567890').PHP_EOL;
//结果 e807f1fcf82d132f9bb018ca6738a19f
#PHP是世界上最好的语言!

相关文章

  • MD5(MD5 消息摘要算法)

    MD5(MD5 消息摘要算法) MD5 简介 MD5 消息摘要算法(MD5 Message-Digest Algo...

  • MD5介绍

    md5介绍 1. md5简介 md5的全称是md5信息摘要算法(英文:MD5 Message-Digest Alg...

  • iOS中使用的MD5与Base64 (Objective-C)

    一. MD5 MD5数字校验NSString对象 MD5数字校验NSData对象 MD5数字加盐校验NSStrin...

  • 第一篇、MD5算法和SHA-1算法

    目录一、MD5算法 1、MD5算法是什么? 2、MD5算法的优点 3、MD5算法的不足 4、MD5加密的应用场景 ...

  • node功能模块封装

    crypto加密 利用nodejs内置crypto模块,来封装md5功能例:写MD5函数 科普:MD5(MD5 M...

  • 去重效率对比:HashTree与BloomFilter

    一、MD5码原理 1、MD5码简介 MD5讯息摘要演算法(英语:MD5 Message-Digest Algori...

  • MD5加密

    MD5 base64 + MD5

  • MAC HASH

    openssl dgst -md5 XXX.xxx openssl md5 XXX.xxx md5 XXX.xxx...

  • 算法

    MD5 MD5:首先,md5不是加密。md5是摘要算法,主要是用来做认证,利用自身优势(不可逆、低碰撞率)解决公开...

  • 笔记-MD5加密

    MD5:全称Message Digest Algorithm MD5(消息摘要算法5)   每个文件的MD5值都是...

网友评论

      本文标题:MD5

      本文链接:https://www.haomeiwen.com/subject/fcnwyktx.html