MD5加密算法的java实现

匿名 (未验证) 提交于 2019-12-02 21:52:03

转载自: https://blog.csdn.net/zyhlwzy/article/details/77967220

MD5加密算法

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理。

MD5算法具有以下特点:

压缩性:任意长度的数据,算出的MD5值长度都是固定的。 容易计算:从原数据计算出MD5值很容易。 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。 

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

算法原理

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,信息的位长=N512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

MD5 Java实现

public class SecurityMD5Utils {
/**
* @Comment MD5编码(生成32位的MD5码)
* @Author Ron
* @Date 2017年9月13日 下午3:18:45
* @return
*/
public static String md5Encode(String inStr) throws Exception {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance(“MD5”);
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return “”;
}

    byte[] byteArray = inStr.getBytes("UTF-8");     byte[] md5Bytes = md5.digest(byteArray);     StringBuffer hexValue = new StringBuffer();     for (int i = 0; i < md5Bytes.length; i++) {         int val = ((int) md5Bytes[i]) & 0xff;         if (val < 16) {             hexValue.append("0");         }         hexValue.append(Integer.toHexString(val));     }     return hexValue.toString(); }  public static void main(String args[]) throws Exception {       String str = new String("amigoxiexiexingxing");       System.out.println("原始:" + str);       System.out.println("MD5后:" + md5Encode(str));   }   

}

但是在实际的应用中,我们可以直接引入org.apache.commons.codec.digest.DigestUtils,然后按照如下方法调用加密即可。

/**

  • @Comment MD5加密密码
  • @Author Ron
  • @Date 2017年9月13日 下午3:09:09
  • @return
    */
    public static String encodePasswordMD5(String psw) {
    if(StringUtils.isEmpty(psw)){
    return null;
    }else{
    return DigestUtils.md5Hex(psw);
    }
    }
文章来源: https://blog.csdn.net/weixin_40224981/article/details/97018019
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!