MD5加密的实现


1.先大致说一下什么是MD5加密。MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),看了很多大神的文章,自己有了点理解 ,MD5其实不算是加密算法,而是一种信息的摘要。它的特性是不可逆的,所以除了暴力破解 一般逆序算法是得不到结果的。举个例子:比如1+99=100,MD5接到的字符是1和99 然后通过自己的算法最后生成100 但知道结果是100却很难推测出是通过1+99得来的。再比如 一本书的每一页取一个字,最后通过计算得出一个MD5码,但却很难通过这个MD5码去推测出这本书的内容。这也就是MD5的不可逆的原因。举的例子和对MD5的理解仅代表本人自己的观点,如有错误还请各位大神批评指正。


2.这篇文章不讨论复杂的MD5的算法实现,由于本人并非科班出生,只是在项目中要用所以大致使用了一下,具体原理等以后有空闲时间慢慢研究。话不多说,直接上代码。


3.分享两个方法①getMD5() 和  ②MD5(),传入要加密的字符str,返回加密成功的字符 .  方法①生成的是小写字母+数字,方法②生成的是大写字母+数字,方法2要是想得到小写字母+数字就把hexDigits数组中的大写换成小写。 大小写可以通过String类的方法处理



[java]  view plain  copy
  1. package com.nebula.app.app.common.utils;  
  2.   
  3. import java.math.BigInteger;  
  4. import java.security.MessageDigest;  
  5.   
  6. public class AppMD5Util {  
  7.       
  8.      /** 
  9.      * 对字符串md5加密(小写+字母) 
  10.      * 
  11.      * @param str 传入要加密的字符串 
  12.      * @return  MD5加密后的字符串 
  13.      */  
  14.     public static String getMD5(String str) {  
  15.         try {  
  16.             // 生成一个MD5加密计算摘要  
  17.             MessageDigest md = MessageDigest.getInstance("MD5");  
  18.             // 计算md5函数  
  19.             md.update(str.getBytes());  
  20.             // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符  
  21.             // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值  
  22.             return new BigInteger(1, md.digest()).toString(16);  
  23.         } catch (Exception e) {  
  24.            e.printStackTrace();  
  25.            return null;  
  26.         }  
  27.     }  
  28.       
  29.       
  30.     /** 
  31.      * 对字符串md5加密(大写+数字) 
  32.      * 
  33.      * @param str 传入要加密的字符串 
  34.      * @return  MD5加密后的字符串 
  35.      */  
  36.       
  37.     public static String MD5(String s) {  
  38.         char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};         
  39.   
  40.         try {  
  41.             byte[] btInput = s.getBytes();  
  42.             // 获得MD5摘要算法的 MessageDigest 对象  
  43.             MessageDigest mdInst = MessageDigest.getInstance("MD5");  
  44.             // 使用指定的字节更新摘要  
  45.             mdInst.update(btInput);  
  46.             // 获得密文  
  47.             byte[] md = mdInst.digest();  
  48.             // 把密文转换成十六进制的字符串形式  
  49.             int j = md.length;  
  50.             char str[] = new char[j * 2];  
  51.             int k = 0;  
  52.             for (int i = 0; i < j; i++) {  
  53.                 byte byte0 = md[i];  
  54.                 str[k++] = hexDigits[byte0 >>> 4 & 0xf];  
  55.                 str[k++] = hexDigits[byte0 & 0xf];  
  56.             }  
  57.             return new String(str);  
  58.         } catch (Exception e) {  
  59.             e.printStackTrace();  
  60.             return null;  
  61.         }  
  62.     }  
  63.   
  64.          public static void main(String[] args) {  
  65.         String md5 = MD5("password");  
  66.               String md52 = getMD5("password22");           
  67.     }  
  68. }  

原博客地址: https://blog.csdn.net/liu1782291245/article/details/73467266
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值