package com.xja.util;
/*******************************************************************************
*
*
* MD5数据加密类
*/
public class MD5Util {
private static MD5Util md5Util = new MD5Util();
public static String getMd5Str(String str){
return md5Util.getMD5ofStr(str);
}
// RFC1321中定义的标准4*4矩阵的常量定义。
static final int S11 = 9,S12 = 12,S13 = 17, S14 = 22;
static final int S21 = 5,S22 = 9, S23 = 14, S24 = 20;
static final int S31 = 4,S32 = 11,S33 = 16, S34 = 23;
static final int S41 = 4 ,S42 = 10,S43 = 15, S44 = 21;
// 按RFC1321标准定义不可变byte型数组PADDING
static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 };
// MD5计算过程中的3组核心数据,采用数组形式存放
private long[] state = new long[4]; // 计算状态(分别对应a b c d)
private byte[] buffer = new byte[64]; // 分配64个字节私有缓冲区
private long[] count = new long[2]; // 位个数
// 最新一次计算结果的16进制ASCII字符串表示,代表了16个字符串形式的MD5值
public String resultStr;
// 最新一次计算结果的2进制数组表示,一共16个字节,代表了128bit形式的MD5值
public byte[] digest = new byte[16];
// MD5_Encoding类提供的主要的接口函数getMD5ofStr,用来进行数据加密变换。调用其可对任意字符串进行加密运算,并以字符串形式返回加密结果。
public String getMD5ofStr(String in) {
md5Init(); // 初始化
md5Update(in.getBytes(), in.length());// 调用MD5的主计算过程
md5Final(); // 输出结果到digest数组中
for (int i = 0; i < 16; i++) {
resultStr += byteToHEX(digest[i]); // 将digest数组中的每个byte型数据转为16进制形式的字符串
}
return resultStr;
}
// 标准的构造函数,调用md5Init函数进行初始化工作
private MD5Util() {
md5Init();
return;
}
// md5初始化函数.初始化核心变量.
private void md5Init() {
state[0] = 0x67452301L; // 定义state为RFC1321中定义的标准幻数
state[1] = 0xefcdab89L; // 定义state为RFC1321中定义的标准幻数
state[2] = 0x98badcfeL; // 定义state为RFC1321中定义的标准幻数
state[3] = 0x10325476L; // 定义state为RFC1321中定义的标准幻数
count[0] = count[1] =0L; // 初始化为0
resultStr = "";// 初始化resultStr字符串为空
for(int i=0;i<16;i++) digest[i]=0;//初始化digest数组元素为0
return;
}
//定义F G H I 为4个基数 ,即为4个基本的MD5函数,进行简单的位运算
private long F(long x, long y, long z) {
return (x & y) | ((~x) & z);
}
private long G(long x, long y, long z) {
return (x & z) | (y & (~z));
}
private long H(long x, long y, long z) {
return x ^ y ^ z;
}
private long I(long x, long y, long z) {
return y ^ (x | (~z));
}
// FF,GG,HH和II调用F,G,H,I函数进行进一步变换
private long FF(long a, long b, long c, long d, long x, long s, long ac) {
a += F(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s)); //这里long型数据右移时使用无符号右移运算符>>>
a += b;
return a;
}
private long GG(long a, long b, long c, long d, long x, long s, long ac) {
a += G(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s)); //这里long型数据右移时使用无符号右移运算符>>>
a += b;
return a;
}
private long HH(long a, long b, long c, long d, long x, long s, long ac) {
a += H(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));//这里long型数据右移时使用无符号右移运算符>>>
a += b;
return a;
}
private long II(long a, long b, long c, long d, long x, long s, long ac) {
a += I(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));//这里long型数据右移时使用无符号右移运算符>>>
a += b;
return a;
}
// MD5的主计算过程,input是需要变换的二进制字节串,inputlen是长度
private void md5Update(byte[] input, int inputLen) {
int i=0, index, partLen;
byte[] block = new byte[64]; // 分配64个字节缓冲区
//根据count计算index值。这里long型数据右移时使用无符号右移运算符>>>
index = (int) (count[0] >>> 3) & 0x3F;
if ((count[0] += (inputLen << 3)) < (inputLen << 3))
count[1]++;
count[1] += (inputLen >>> 29); //这里int型数据右移时使用无符号右移运算符>>>
partLen = 64 - index; //计算partLen值
if (inputLen >= partLen) {
md5Memcpy(buffer, input, index, 0, partLen);
md5Transform(buffer);
for (i = partLen; i + 63 < inputLen; i += 64) {
md5Memcpy(block, input, 0, i, 64);
md5Transform(block);
}
index = 0;
} else
i = 0;
md5Memcpy(buffer, input, index, i, inputLen - i);
}
// 整理和填写输出结果,结果放到数组digest中。
private void md5Final() {
byte[] bits = new byte[8];
int index, padLen;
Encode(bits, count, 8);
index = (int) (count[0] >>> 3) & 0x3f; //这里long型数据右移时使用无符号右移运算符>>>
padLen = (index < 56) ? (56 - index) : (120 - index);
md5Update(PADDING, padLen);
md5Update(bits, 8);
Encode(digest, state, 16);
}
// byte数组的块拷贝函数,将input数组中的起始位置为inpos,长度len的数据拷贝到output数组起始位置outpos处。
private void md5Memcpy(byte[] output, byte[] input, int outpos, int inpos,
int len) {
int i;
for (i = 0; i < len; i++)
output[outpos + i] = input[inpos + i];
}
// MD5核心变换计算程序,由md5Update函数调用,block是分块的原始字节数组
private void md5Transform(byte block[]) {
long a = state[0], b = state[1], c = state[2], d = state[3];
long[] x = new long[16];
Decode(x, block, 64);
// 进行4级级联运算
// 第1级
a = FF(a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */
d = FF(d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */
c = FF(c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */
b = FF(b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */
a = FF(a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */
d = FF(d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */
c = FF(c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */
b = FF(b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */
a = FF(a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */
d = FF(d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */
c = FF(c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */
b = FF(b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */
a = FF(a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */
d = FF(d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */
c = FF(c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */
b = FF(b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */
// 第2级
a = GG(a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */
d = GG(d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */
c = GG(c, d, a, b, x[11], S23, 0x2
没有合适的资源?快使用搜索试试~ 我知道了~
0506libMaven项目包
共108个文件
xml:37个
class:31个
java:16个
0 下载量 161 浏览量
2024-05-13
15:57:15
上传
评论
收藏 12.04MB ZIP 举报
温馨提示
0506libMaven项目包
资源推荐
资源详情
资源评论
收起资源包目录
0506libMaven项目包 (108个子文件)
MD5Util.class 8KB
MD5Util.class 8KB
GetAllOrAddControllerOrDeleteOrSet.class 5KB
GetAllOrAddControllerOrDeleteOrSet.class 5KB
Lib.class 4KB
Lib.class 4KB
LibServiceImpl.class 3KB
LibServiceImpl.class 3KB
SqlSessionUtil.class 3KB
SqlSessionUtil.class 3KB
SearchVo.class 2KB
SearchVo.class 2KB
GetAllTypeListener.class 2KB
GetAllTypeListener.class 2KB
Type.class 2KB
Type.class 2KB
TypeServiceImpl.class 1KB
TypeServiceImpl.class 1KB
FileUtil.class 856B
FileUtil.class 856B
LibMapper.class 417B
LibMapper.class 417B
LibTest.class 394B
LibService.class 386B
LibService.class 386B
TypeMapper.class 334B
TypeMapper.class 334B
ImgUtil.class 249B
ImgUtil.class 249B
TypeService.class 219B
TypeService.class 219B
.gitignore 184B
_0506Java_Enterprise.iml 3KB
druid-1.1.10.jar 2.63MB
mysql-connector-j-8.0.33.jar 2.37MB
lombok-1.18.24.jar 1.88MB
mybatis-3.5.7.jar 1.66MB
protobuf-java-3.21.9.jar 1.59MB
jsqlparser-4.0.jar 742KB
fastjson-1.2.75.jar 640KB
jsqlparser-3.2.jar 522KB
jstl-1.2.jar 405KB
log4j-1.2.12.jar 350KB
pagehelper-5.2.0.jar 94KB
slf4j-api-1.7.3.jar 25KB
slf4j-log4j12-1.7.3.jar 9KB
MD5Util.java 12KB
GetAllOrAddControllerOrDeleteOrSet.java 5KB
LibServiceImpl.java 3KB
GetAllTypeListener.java 2KB
SqlSessionUtil.java 2KB
TypeServiceImpl.java 806B
LibService.java 388B
LibTest.java 385B
FileUtil.java 384B
Lib.java 360B
LibMapper.java 309B
SearchVo.java 286B
Type.java 248B
TypeMapper.java 223B
ImgUtil.java 150B
TypeService.java 144B
jquery-3.5.1.min.js 87KB
jquery-3.5.1.min.js 87KB
index.jsp 3KB
index.jsp 3KB
set.jsp 972B
set.jsp 972B
add.jsp 817B
add.jsp 817B
MANIFEST.MF 88B
workspace.xml 9KB
uiDesigner.xml 9KB
pom.xml 5KB
_0506Java_Enterprise_war_exploded.xml 2KB
LibMapper.xml 2KB
LibMapper.xml 2KB
LibMapper.xml 2KB
mybatis.xml 1KB
mybatis.xml 1KB
mybatis.xml 1KB
jarRepositories.xml 880B
compiler.xml 715B
Maven__com_google_protobuf_protobuf_java_3_21_9.xml 665B
Maven__javax_servlet_javax_servlet_api_4_0_1.xml 662B
Maven__com_mysql_mysql_connector_j_8_0_33.xml 653B
Maven__com_github_pagehelper_pagehelper_5_2_0.xml 645B
Maven__com_github_jsqlparser_jsqlparser_4_0.xml 631B
Maven__org_slf4j_slf4j_log4j12_1_7_3.xml 618B
Maven__org_hamcrest_hamcrest_core_1_3.xml 616B
Maven__org_projectlombok_lombok_1_18_24.xml 615B
Maven__com_alibaba_fastjson_1_2_75.xml 598B
misc.xml 596B
Maven__javax_servlet_jsp_jsp_api_2_2.xml 594B
Maven__org_slf4j_slf4j_api_1_7_3.xml 590B
Maven__org_mybatis_mybatis_3_5_7.xml 584B
Maven__com_alibaba_druid_1_1_10.xml 577B
Maven__junit_junit_4_13_1.xml 553B
Maven__log4j_log4j_1_2_12.xml 553B
Maven__jstl_jstl_1_2.xml 521B
共 108 条
- 1
- 2
资源评论
别挡
- 粉丝: 459
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功