zoukankan      html  css  js  c++  java
  • 自己写的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
    		//从这里看出   值不是随意生成的,给定更新数据,则每次生成的值都一样
    	}
    
    }
    

      

  • 相关阅读:
    python完成简单购物功能
    Java对字符串进行加密
    python完成留言板功能
    webpack4 学习
    webpack学习之 vue-cli3和4
    节点操作
    new 做了什么
    从url输入网址后发生什么
    防抖节流
    BFC原理和解决方案
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/7122023.html
Copyright © 2011-2022 走看看