java MD5加密算法

  1. import java.io.UnsupportedEncodingException;

  2. import java.security.MessageDigest;

  3. import java.security.NoSuchAlgorithmException;



  4. /**

  5.  * 32位MD5加密,验证

  6.  * @author liushang

  7.  *

  8.  */

  9. public class MD5 {

  10.     

  11.     /**

  12.      * 将指定的字符串用MD5加密

  13.      * @param originstr 需要加密的字符串

  14.      * @return 加密后的字符串

  15.      */

  16.     public String ecodeByMD5(String originstr){

  17.         String result = null;

  18.         char hexDigits[] = {//用来将字节转换成 16 进制表示的字符

  19.              '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; 

  20.         if(originstr != null){

  21.             try {

  22.                 //返回实现指定摘要算法的 MessageDigest 对象

  23.                 MessageDigest md = MessageDigest.getInstance("MD5");

  24.     

  25.                 //使用utf-8编码将originstr字符串编码并保存到source字节数组

  26.                 byte[] source = originstr.getBytes("utf-8");

  27.                 //使用指定的 byte 数组更新摘要

  28.                 md.update(source);

  29.                 //通过执行诸如填充之类的最终操作完成哈希计算,结果是一个128位的长整数

  30.                 byte[] tmp = md.digest();

  31.                 //用16进制数表示需要32位

  32.                 char[] str = new char[32];

  33.                 for(int i=0,j=0; i < 16; i++){

  34.                     //j表示转换结果中对应的字符位置

  35.                     //从第一个字节开始,对 MD5 的每一个字节

  36.                     //转换成 16 进制字符

  37.                     byte b = tmp[i];

  38.                     //取字节中高 4 位的数字转换

  39.                     //无符号右移运算符>>> ,它总是在左边补0

  40.                     //0x代表它后面的是十六进制的数字. f转换成十进制就是15

  41.                     str[j++] = hexDigits[b>>>& 0xf];

  42.                     // 取字节中低 4 位的数字转换

  43.                     str[j++] = hexDigits[b&0xf];

  44.                 }

  45.                 result = new String(str);//结果转换成字符串用于返回

  46.             } catch (NoSuchAlgorithmException e) {

  47.                 //当请求特定的加密算法而它在该环境中不可用时抛出此异常

  48.                 e.printStackTrace();

  49.             } catch (UnsupportedEncodingException e) {

  50.                 //不支持字符编码异常

  51.                 e.printStackTrace();

  52.             }

  53.         }

  54.         return result;

  55.     }

  56.     

  57.     //使用MD5检查密码

  58.     public boolean checkPWD(String typPWD, String relPWD){

  59.         if(ecodeByMD5(typPWD).equals(ecodeByMD5(relPWD))){

  60.             return true;

  61.         }

  62.         return false;

  63.     }

  64. }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值