新手必学的加密算法:MD5加密

新手必学的加密算法:MD5加密

MD5Util类里面的内容:

package com.neuedu.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
	private static final char[] HEX = new char[] {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	public static String md5(String source) {
		
		
		try {
			//1、返回现实指定摘要算法的MessageDigest对象
			MessageDigest messageDigest=MessageDigest.getInstance("MD5");
			
			
			//2、获取字节,string-》byte
			byte[] input = source.getBytes();
			
			
			//3、使用指定的byte更新摘要
			messageDigest.update(input);
			
			
			//4、加密:通过执行诸如填充之类的最终操作完成希哈运算:128位(16字节) 的散列值
			byte[]  bytes =messageDigest.digest();
			
			
			//1字节 = 8位    :  35 -> 0010 0011
			//长度:16  {-89, -70, -62, 35, -97, -51, -53, 58, 6, 121, 3, -40, 7, 124, 74, 7}
			//System.out.println("长度:" + bytes.length + "  " +Arrays.toString(bytes));
			
			//5.将128位的MD5散列表示为长度为32的十六进制数字
			/*int b = -89;
			//获取左边四位
			System.out.println(Integer.toBinaryString(b));          //111111111111111111111111 1010 0111
			System.out.println(Integer.toBinaryString(b>>>4));      //000011111111111111111111 1111 1010  无符号右移4位
															        //000000000000000000000000 0000 1111 为了将左四位的1去掉,需要与十六进制的F进行与&运算
			System.out.println(Integer.toBinaryString(b>>>4 & 0xF));//000000000000000000000000 0000 1010  左边的四位
			
			//获取右边的四位
			System.out.println(Integer.toBinaryString(b));          //111111111111111111111111 1010 0111
														            //000000000000000000000000 0000 1111 为了将右四位前面的1去掉,需要与十六进制的F进行与&运算
			System.out.println(Integer.toBinaryString(b & 0xF));    //000000000000000000000000 0000 0111 右边的四位
			
			//十进制
			System.out.println(b>>>4 & 0xF);//10
			System.out.println(b & 0xF);    //7
			
			//十六进制
			System.out.println(Integer.toHexString(b>>>4 & 0xF));//a
			System.out.println(Integer.toHexString(b & 0xF));    //7*/
			
			//对密码进行加密,写属于自己的算加密算法,上面的是供你使用的一部分,就是说这一段算法随你自己安排,这里只是一个示范作用。
			//①创建一个字符数组用来存值
			char[] chars = new char[bytes.length*2];
			int k =0;
			for (int i = 0; i < bytes.length; i++) {
				byte b= bytes[i];
				//将这个16位里面的的值逐一进行拆分,具体拆分请看上面 的做法,
				chars[k++]=	HEX[b>>>4 & 0xF];
				chars [k++]= HEX[b & 0xF];
				
			}
			return new String (chars);
			
			
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return null;
		
	}
	

}

测试类:test

package com.neuedu.util;

public class test {
	public static void main(String[] args) {
		
		System.out.println(MD5Util.md5("zhowen"));
	}

}

使用方法和测试里面的一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值