这篇文章将为大家详细讲解有关 MD5加密算法如何在java项目中运用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
java 中 MD5加密的实例
主要代码如下
package techDemo;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
import org.junit.Test;
import sun.misc.BASE64Encoder;
/**
* MD5加密算法
* @author<a href="mailto:953801304@qq.com" rel="external nofollow" >胡龙华</a>
* @version 2017-5-30 下午1:34:51
* @fileName MD5.java
*/
public class MD5 {
public static void main(String[] args) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
// 原文:
String pwd = "12345";
// digese---得到byte数组 加密后的
byte b []= md.digest(pwd.getBytes());
System.out.println(b.length); // 16
// 再将byte b [] 转化为我们能看的懂 密文
//第一种方式:BASE64Encoder (要导依赖包)
BASE64Encoder bd = new BASE64Encoder();
//密文1:
String strpwd1 = bd.encode(b);
System.out.println(strpwd1);
//第二种方式:自己写代码将byte 数组转化为16进制的并且最后的密文保证长度为32
String strpwd2 = "";
for(byte i:b){
// 将单个字节转化为 16 进制
String s = Integer.toHexString(i & 0xff);
// 当i<16时,长度为1加个符号 ,这样可以保证最后为 密文为32
if(s.length()==1){
s = s + "0";
}
strpwd2 += s;
}
System.out.println(strpwd2);
/* 输出结果
16
gnzLDuqKcGxMNKFokfhOew==
827ccbe0ea8a706c4c34a16891f84e7b */
}
// 演示模拟用户登录
@Test
public void demoLogin()throws Exception{
// 当用户注册成功时,把用户的密码生成密文和用户名一起保存
// 登录时,通过把用户输入密码再次生成密文,判断两次密文是否一致来验证用户
// 假设用户密码是 123456789,先生成密文
String pwd = "123456789";
String Mpwd = Md5(pwd);
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请输入密码");
String p = sc.nextLine();
if(Mpwd.equals( Md5(p))){
System.out.println("密码正确");
break;
}else{
System.out.println("密码错误,请重新输入");
}
}
}
private String Md5(String pwd) throws NoSuchAlgorithmException {
String Mpwd ="";
MessageDigest md = MessageDigest.getInstance("MD5");
byte b [] = md.digest(pwd.getBytes());
for(byte i:b){
String s = Integer.toHexString( i & 0xff);
if(s.length()==1){
s = s +"0";
}
Mpwd = s + pwd;
}
return Mpwd;
}
}
下面是 我们老师的代码 更加细节
package techDemo;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.junit.Test;
import sun.misc.BASE64Encoder;
public class Md5Demo {
//加密算法类java.security.MessageDigest
@Test//md5加密的核心代码
public void demo1() throws Exception{
MessageDigest md = MessageDigest.getInstance("MD5");
String pwd="ewi24343423";
byte b1[] = pwd.getBytes();
byte b2[] = md.digest( b1 ); //利用md对象把 明文b1[] 加密成 密文b2[]
//至此,其实md5加密已经完成,可惜它生成的密文全是字节数据,不是我们通常习惯(看得懂)的16进制的数
//因此还要进一步处理---见demo2()演示
System.out.println("len:"+b2.length); //永远是:16 ---md5加密算法中,无论明文数据有多长,密文都是16个字节数据
for(byte b: b2){
//System.out.print(b+" ");
System.out.print((char)b+" ");
}
System.out.println();
}
@Test//把md5生成的密文转换成我们习惯的方式---与前面相比,怪字符少一些,但还不是16进制
public void demo2() throws Exception{
MessageDigest md = MessageDigest.getInstance("MD5");
String pwd="ewi24343423";
byte b1[] = pwd.getBytes();
byte b2[] = md.digest( b1 ); //利用md对象把 明文b1[] 加密成 密文b2[]
System.out.println("len:"+b2.length); //永远是:16
BASE64Encoder en = new BASE64Encoder();
String pwd2 = en.encode(b2);
System.out.println(pwd2);
}
/*
* demo2()方法的缺点:
* 1. 密文不是我们最习惯的16进制方式
* 2. 所使用的类BASE64Encoder在API中没有,意味着该类是没有公开
* 给我们程序员用的,因此它如果变动了,我们是无话可说的即不稳定的!
* ---不在接口中,官方是可以随便更改
*/
@Test //自己手动写代码,把md5生成的密文转换成 我们最习惯的16进制方式
public void demo3()throws Exception{
MessageDigest md = MessageDigest.getInstance("MD5");
String pwd="e655656w23";
byte b1[] = pwd.getBytes();
byte b2[] = md.digest( b1 ); //利用md对象把 明文b1[] 加密成 密文b2[]
System.out.println("len:"+b2.length); //永远是:16
//手动写代码,把16个byte数据 转换成 32个 16进制数
String pwd2="";
for(byte i: b2){
String s = Integer.toHexString(i & 0xff); //如果i<16则s只有一位,只有>=16的i转换成的s才是两位
if(s.length()==1){
s ="0"+s; // s ="f"+s;
}
pwd2 +=s;
}
pwd2 = pwd2.toUpperCase();
System.out.println(pwd2.length());
System.out.println(pwd2);
}
}
关于 MD5加密算法如何在java项目中运用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。