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
没有合适的资源?快使用搜索试试~ 我知道了~
0515student的一对多 多对多关系项目包
共137个文件
class:50个
xml:34个
java:25个
0 下载量 88 浏览量
2024-05-16
17:08:35
上传
评论
收藏 23.11MB ZIP 举报
温馨提示
0515student的一对多 多对多关系项目包
资源推荐
资源详情
资源评论
收起资源包目录
0515student的一对多 多对多关系项目包 (137个子文件)
MD5Util.class 8KB
MD5Util.class 8KB
Student.class 6KB
Student.class 6KB
StudentServiceImpl.class 4KB
StudentServiceImpl.class 4KB
Insert.class 3KB
Insert.class 3KB
SearchVo.class 3KB
SearchVo.class 3KB
Update.class 3KB
Update.class 3KB
SqlSessionUtil.class 3KB
SqlSessionUtil.class 3KB
GetAllStu.class 3KB
GetAllStu.class 3KB
Course.class 3KB
Course.class 3KB
GetAllTypeListener.class 2KB
GetAllTypeListener.class 2KB
Type.class 2KB
Type.class 2KB
GetStuById.class 2KB
GetStuById.class 2KB
Delete.class 2KB
Delete.class 2KB
FilterFirst.class 1KB
FilterFirst.class 1KB
CourseServiceImpl.class 1KB
CourseServiceImpl.class 1KB
TypeServiceImpl.class 1KB
TypeServiceImpl.class 1KB
StudentMapper.class 959B
StudentMapper.class 959B
FileUtil.class 856B
FileUtil.class 856B
Test.class 831B
Test.class 831B
CourseMapper.class 592B
CourseMapper.class 592B
StudentService.class 415B
StudentService.class 415B
TypeMapper.class 334B
TypeMapper.class 334B
ImgUtil.class 247B
ImgUtil.class 247B
CourseService.class 225B
CourseService.class 225B
TypeService.class 219B
TypeService.class 219B
.gitignore 184B
_0515student.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
StudentServiceImpl.java 4KB
GetAllTypeListener.java 2KB
GetAllStu.java 2KB
Insert.java 2KB
SqlSessionUtil.java 2KB
Update.java 2KB
StudentMapper.java 925B
GetStuById.java 910B
CourseServiceImpl.java 851B
Delete.java 783B
Test.java 777B
TypeServiceImpl.java 772B
FilterFirst.java 694B
Student.java 491B
StudentService.java 473B
CourseMapper.java 390B
FileUtil.java 384B
SearchVo.java 307B
Course.java 289B
Type.java 248B
TypeMapper.java 225B
CourseService.java 150B
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
update.jsp 3KB
update.jsp 3KB
add.jsp 2KB
add.jsp 2KB
inputFiles.lst 2KB
createdFiles.lst 0B
inputFiles.lst 0B
共 137 条
- 1
- 2
资源评论
别挡
- 粉丝: 503
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- com.aesq.zb_v1.0.35_danji100.com.apk
- 760996331259605建立门派1.360.apk
- 下面提供一些C语言的入门示例代码,并附有注释,以帮助理解每个部分的功能 1. Hello World程序 #include
- 下面提供一些C语言的入门示例代码,并附有注释,以帮助理解每个部分的功能 1. Hello World程序 #include
- 下面提供一些C语言的入门示例代码,并附有注释,以帮助理解每个部分的功能 1. Hello World程序 #include
- C语言是一种广泛使用的计算机编程语言,它是许多其他编程语言的基础 以下是一些C语言入门的例子和代码,适合初学者学习和实践
- C语言是一种广泛使用的计算机编程语言,它是许多其他编程语言的基础 以下是一些C语言入门的例子和代码,适合初学者学习和实践
- C语言是一种广泛使用的计算机编程语言,它是许多其他编程语言的基础 以下是一些C语言入门的例子和代码,适合初学者学习和实践
- C语言 入门例子和代码学习
- C语言 入门例子和代码学习
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功