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
没有合适的资源?快使用搜索试试~ 我知道了~
0510Goods的Maven项目包
共120个文件
class:39个
xml:37个
java:21个
0 下载量 184 浏览量
2024-05-13
16:21:35
上传
评论
收藏 11.6MB ZIP 举报
温馨提示
0510Goods的Maven项目包
资源推荐
资源详情
资源评论
收起资源包目录
0510Goods的Maven项目包 (120个子文件)
MD5Util.class 8KB
MD5Util.class 8KB
Goods.class 6KB
Goods.class 5KB
GoodsServiceImpl.class 4KB
GoodsServiceImpl.class 4KB
GetAll.class 3KB
GetAll.class 3KB
SearchVo.class 3KB
SearchVo.class 3KB
SqlSessionUtil.class 3KB
SqlSessionUtil.class 3KB
Set.class 3KB
Add.class 3KB
GetAllTypeListener.class 2KB
GetAllTypeListener.class 2KB
Type.class 2KB
Type.class 2KB
GetOne.class 2KB
GetOne.class 2KB
SetState.class 2KB
FilterFirst.class 1KB
FilterFirst.class 1KB
TypeServiceImpl.class 1KB
TypeServiceImpl.class 1KB
GoodsMapper.class 1KB
GoodsMapper.class 1KB
FileUtil.class 856B
FileUtil.class 856B
Test.class 782B
Test.class 782B
GoodsService.class 517B
GoodsService.class 517B
TypeMapper.class 470B
TypeMapper.class 470B
ImgUtil.class 249B
ImgUtil.class 249B
TypeService.class 219B
TypeService.class 219B
.gitignore 184B
_0510JavaEnterpriceGoods.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
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
GoodsServiceImpl.java 5KB
GetAll.java 2KB
GetAllTypeListener.java 2KB
SqlSessionUtil.java 2KB
Set.java 1KB
Add.java 1KB
GoodsMapper.java 1KB
SetState.java 942B
GetOne.java 913B
TypeServiceImpl.java 772B
FilterFirst.java 694B
Test.java 558B
Goods.java 502B
GoodsService.java 486B
FileUtil.java 384B
SearchVo.java 311B
TypeMapper.java 272B
Type.java 248B
ImgUtil.java 150B
TypeService.java 144B
jquery-3.5.1.min.js 87KB
jquery-3.5.1.min.js 87KB
index.jsp 5KB
index.jsp 5KB
set.jsp 2KB
set.jsp 2KB
add.jsp 2KB
add.jsp 2KB
MANIFEST.MF 88B
uiDesigner.xml 9KB
workspace.xml 8KB
pom.xml 5KB
_0510JavaEnterpriceGoods_war_exploded.xml 2KB
GoodsMapper.xml 2KB
GoodsMapper.xml 2KB
GoodsMapper.xml 2KB
mybatis.xml 2KB
mybatis.xml 2KB
mybatis.xml 2KB
jarRepositories.xml 880B
compiler.xml 723B
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
共 120 条
- 1
- 2
资源评论
别挡
- 粉丝: 511
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据库管理工具:dbeaver-ce-23.2.1-macos-aarch64.dmg
- 数据库管理工具:dbeaver-ce-23.2.0-stable.x86-64.rpm
- 全国大学生建模大赛题目.pdf
- 数据库管理工具:dbeaver-ce-23.2.0-macos-x86-64.dmg
- 数据库管理工具:dbeaver-ce-23.2.0-macos-aarch64.dmg
- 电机学运动控制课程基础知识-绪论部分
- Delphi 12 控件之HGetIt.zip
- 数据库管理工具:dbeaver-ce-23.1.5-x86-64-setup.exe
- ADS1256的stm32参考程序
- 数据库管理工具:dbeaver-ce-23.1.5-macos-x86-64.dmg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功