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
没有合适的资源?快使用搜索试试~ 我知道了~
0513student的Maven项目包
共112个文件
class:38个
xml:34个
java:19个
0 下载量 38 浏览量
2024-05-13
16:48:25
上传
评论
收藏 11.59MB ZIP 举报
温馨提示
0513student的Maven项目包
资源推荐
资源详情
资源评论
收起资源包目录
0513student的Maven项目包 (112个子文件)
MD5Util.class 8KB
MD5Util.class 8KB
Student.class 5KB
Student.class 5KB
SqlSessionUtil.class 3KB
SqlSessionUtil.class 3KB
Add.class 2KB
Add.class 2KB
GetAll.class 2KB
GetAll.class 2KB
SearchVo.class 2KB
SearchVo.class 2KB
GetAllTypeListener.class 2KB
GetAllTypeListener.class 2KB
StudentServiceImpl.class 2KB
StudentServiceImpl.class 2KB
Type.class 2KB
Type.class 2KB
FilterFirst.class 1KB
FilterFirst.class 1KB
Set.class 1KB
Set.class 1KB
TypeServiceImpl.class 1KB
TypeServiceImpl.class 1KB
Test.class 946B
Test.class 946B
FileUtil.class 856B
FileUtil.class 856B
StudentMapper.class 684B
StudentMapper.class 684B
TypeMapper.class 470B
TypeMapper.class 470B
StudentService.class 322B
StudentService.class 322B
ImgUtil.class 247B
ImgUtil.class 247B
TypeService.class 219B
TypeService.class 219B
.gitignore 184B
_0513JavaEnterprise.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
GetAllTypeListener.java 2KB
StudentServiceImpl.java 2KB
GetAll.java 2KB
SqlSessionUtil.java 2KB
Add.java 1KB
TypeServiceImpl.java 772B
Set.java 694B
FilterFirst.java 694B
StudentMapper.java 560B
Test.java 475B
StudentService.java 458B
Student.java 414B
FileUtil.java 384B
SearchVo.java 276B
TypeMapper.java 272B
Type.java 248B
ImgUtil.java 148B
TypeService.java 144B
jquery-3.5.1.min.js 87KB
jquery-3.5.1.min.js 87KB
index.jsp 4KB
index.jsp 4KB
add.jsp 2KB
add.jsp 2KB
MANIFEST.MF 88B
workspace.xml 9KB
uiDesigner.xml 9KB
pom.xml 5KB
_0513JavaEnterprise_war_exploded.xml 2KB
StudentMapper.xml 1KB
StudentMapper.xml 1KB
StudentMapper.xml 1KB
mybatis.xml 1KB
mybatis.xml 1KB
mybatis.xml 1KB
jarRepositories.xml 880B
compiler.xml 713B
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
共 112 条
- 1
- 2
资源评论
别挡
- 粉丝: 442
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功