MD5消息摘要算法(英语:- ),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
这波解释是不是很正经严肃,好像看懂了,但是如果有人问MD5是什么,MD5就是...就是小编也不知道md5算法java实现,通俗一点MD5是一种算法,用于数据的安全方面对数据进行加密和解密,虽然MD5被认为不安全,而且渐渐被AES所取代,但是对于一般的情况下使用时可以的,例如某个管理后台的账号密码加密,普通的HTTP请求签名,数据库存储的一些重要数据加密,在这小编就说一下MD5在Java上的使用。
在JDK内部集成多种算法,包括MD5和AES等,那MD5在Java上的使用就非常简单了,默认的加密是小写的,如下
知道你们这些懒人肯定要可以复制的源码,小编会在最后附上整个工具类的源码的,默认的加密就是生成小写,但是如果想要使用大写也非常简单,就是使用md5算法java实现 JAVA使用MD5加密解密,自定义一个数组,代码如下
下面附上整个工具类的源码,小编哪里有写的不好或者有错误,希望大家能留言指出
mons.codec..Hex;
java..;
java..tion;
java.util.;
/**
* @date 2019/9/16 10:30
*/
class {
/**
* 字符串MD5(小写+字母)
*
* @param str 要进行MD5的字符串
*/
( str) {
// 获取MD5实例
md5 =null;
try {
md5 = .("MD5");
}catch (tion e) {
e.();
.out.(e.());
"获取MD5实例异常";
}
// 将加密字符串转换为字符数组
char[] = str.();
byte[] =new byte[.];
// 开始加密
for (int i =0; i < .; i++)
[i] = (byte) [i];
byte[] = md5.();
sb =new ();
for (int i =0; i < .; i++) {
int var = [i] &0xff;
if (var
sb.("0");
sb.(.(var));
}
sb.();
}
/**
* 字符串MD5(大写+字母)
*
* @param 要进行MD5的字符串
*/
( ) {
char [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
try {
byte [] = .("UTF-8");
= .("MD5");
.();
byte md[] = .();
int j = md.;
char str[] =new char[j *2];
int k =0;
for (int i =0; i < j; i++) {
byte byte0 = md[i];
str[k++] = [byte0 >>>4 &15];
str[k++] = [byte0 &15];
}
new (str);
}catch ( e) {
null;
}
}
/**
* 加盐MD5
*/
( ) {
// 生成一个16位的随机数
=new ();
=new (16);
.(.()).(.());
int len = .();
if (len
for (int i =0; i
.("0");
}
}
// 生成最终的加密盐
Salt = .();
=( + Salt);
char[] cs =new char[48];
for (int i =0; i
cs[i] = .(i /3 *2);
char c = Salt.(i /3);
cs[i +1] = c;
cs[i +2] = .(i /3 *2 +1);
}
.(cs);
}
/**
* 验证加盐后是否和原文一致
* @param md5原文
* @param 加盐md5后的md5串
*/
( , ) {
char[] cs1 =new char[32];
char[] cs2 =new char[16];
for (int i =0; i
cs1[i /3 *2] = .(i);
cs1[i /3 *2 +1] = .(i +2);
cs2[i /3] = .(i +1);
}
Salt =new (cs2);
( + Salt).(.(cs1));
}
/**
* 单次加密,双次解密
*/
( inStr) {
char[] = inStr.();
for (int i =0; i < .; i++) {
[i] = (char) ([i] ^'t');
}
str = .();
str;
}
/**
* 使用的Hex类实现Hex(16进制字符串和)和字节数组的互转
*/
@("")
( str) {
try {
md = .("MD5");
byte[] = md.(str.());
new (new Hex().());
}catch ( e) {
e.();
.out.(e.());
"";
}
}
void main([] args) {
.out.(("admin"));
.out.(("admin",""));
.out.(("admin"));
.out.((("admin")));
}
}
补充说明:
MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数。数据库并不明文存储用户密码,而是在用户登录时将输入密码字符串进行MD5加密,与数据库中所存储的MD5值匹配,从而降低密码数据库被盗取后用户损失的风险。
MD5加密算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成md5算法java实现,将这四个32位分组级联后将生成一个128位散列值。