自己写的MD5加密原码

package com.wh.md5;

import java.security.MessageDigest;
import java.util.Arrays;

/**
 * @author 王恒
 * @datetime 2017年7月5日 下午3:40:58
 * @description
 * 	   MD5加密源码
 *     核心是21行到26行及36、37行(好吧,位运算在这里真的挺有用)
 * @see  常用于对登录密码进行加密,能保证,即使数据库被侵占了,对方也拿不到明文密码    
 */
public class MyMd5 {

	public final static String md5(String s){
		//以16进制进行转换
		char[] hexDigits={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
		try{
			//将字符创变为字节数组
			byte[] strTemp = s.getBytes(); 
			//创建MessageDigest对象
			MessageDigest mdTemp = MessageDigest.getInstance("MD5");
			//使用strTemp字节数组更新mdTemp摘要
			mdTemp.update(strTemp);
			//通过填充之类的相关操作完成哈希计算
			byte[] digest = mdTemp.digest();
			System.out.println("byte[] digest:   "+Arrays.toString(digest));
			// 得到哈希算法之后的长度
			int j=digest.length; 
			//System.out.println("digest.length:    "+j);
			//创建一个新的字符数组,长度为digest的两倍,用于创建新的字符创
			char[] newChar=new char[2*j];
			int k=0;
			for(int i=0;i<j;i++){
				byte b=digest[i];
				newChar[k++]=hexDigits[b>>>4&0xf];//奇数位的位运算
				newChar[k++]=hexDigits[b&0xf];//偶数位的位运算
			}
			//返回一个新的字符串
			return new String(newChar);
		}catch(Exception e){
			return null;
		}
	}
	
	public static void main(String[] args) {
		String md5 = MyMd5.md5("b"); 
		System.out.println("md5:    "+md5); 
		//第1次输出值           md5:    92eb5ffee6ae2fec3ad71c777531578f
		//第2次输出值           md5:    92eb5ffee6ae2fec3ad71c777531578f
		//从这里看出   值不是随意生成的,给定更新数据,则每次生成的值都一样
	}

}

  

转载于:https://www.cnblogs.com/1020182600HENG/p/7122023.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值