package com.guestbook.sys;
/************************************************
MD5 算法的Java Bean
@author:Topcat Tuppin
Last Modified:10,Mar,2001
*************************************************/
import java.lang.reflect.*;
/*************************************************
md5 类实现了RSA Data Security, Inc.在提交给IETF
的RFC1321中的MD5 message-digest 算法。
*************************************************/
public class MD5
{
/* 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的,
这里把它们实现成为static final是表示了只读,切能在同一个进程空间内的多个
Instance间共享*/
static final int S11 = 7;
static final int S12 = 12;
static final int S13 = 17;
static final int S14 = 22;
static final int S21 = 5;
static final int S22 = 9;
static final int S23 = 14;
static final int S24 = 20;
static final int S31 = 4;
static final int S32 = 11;
static final int S33 = 16;
static final int S34 = 23;
static final int S41 = 6;
static final int S42 = 10;
static final int S43 = 15;
static final int S44 = 21;
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,
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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
/* 下面的三个成员是MD5计算过程中用到的3个核心数据,在原始的C实现中
被定义到MD5_CTX结构中
*/
private long[] state = new long[4]; // state (ABCD)
private long[] count = new long[2]; // number of bits, modulo 2^64 (lsb first)
private byte[] buffer = new byte[64]; // input buffer
/* digestHexStr是MD5的唯一一个公共成员,是最新一次计算结果的
16进制ASCII表示.
*/
public String digestHexStr;
/* digest,是最新一次计算结果的2进制内部表示,表示128bit的MD5值.
*/
private byte[] digest = new byte[16];
/*
getMD5ofStr是类MD5最主要的公共方法,入口参数是你想要进行MD5变换的字符串
返回的是变换完的结果,这个结果是从公共成员digestHexStr取得的.
*/
private String getMD5ofStr(String inbuf) {
md5Init();
md5Update(inbuf.getBytes(), inbuf.length());
md5Final();
digestHexStr = "";
for (int i = 0; i < 16; i++) {
digestHexStr += byteHEX(digest[i]);
}
return digestHexStr.toLowerCase();
}
public static String getMD5Str( String parr )
{
MD5 md5 = new MD5();
return md5.getMD5ofStr( parr ).toLowerCase();
}
// 这是MD5这个类的标准构造函数,JavaBean要求有一个public的并且没有参数的构造函数
public MD5() {
md5Init();
return;
}
/* md5Init是一个初始化函数,初始化核心变量,装入标准的幻数 */
private void md5Init() {
count[0] = 0L;
count[1] = 0L;
///* Load magic initialization constants.
state[0] = 0x67452301L;
state[1] = 0xefcdab89L;
state[2] = 0x98badcfeL;
state[3] = 0x10325476L;
return;
}
/* F, G, H ,I 是4个基本的MD5函数,在原始的MD5的C实现中,由于它们是
简单的位运算,可能出于效率的考虑把它们实现成了宏,在java中,我们把它们
实现成了private方法,名字保持了原来C中的。 */
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进行近一步变换
FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
*/
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));
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));
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));
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));
a += b;
return a;
}
/*
md5Update是MD5的主计算过程,inbuf是要变换的字节串,inputlen是长度,这个
函数由getMD5ofStr调用,调用之前需要调用md5init,因此把它设计成private的
*/
private void md5Update(byte[] inbuf, int inputLen) {
int i, index, partLen;
byte[] block = new byte[64];
index = (int)(count[0] >>> 3) & 0x3F;
// /* Update number of bits */
if ((count[0] += (inputLen << 3)) < (inputLen << 3))
count[1]++;
count[1] += (inputLen >>> 29);
partLen = 64 - index;
// Transform as many times as possible.
if (inputLen >= partLen) {
md5Memcpy(buffer, inbuf, index, 0, partLen);
md5Transform(buffer);
for (i = partLen; i + 63 < inputLen; i += 64) {
md5Memcpy(block, inbuf, 0, i, 64);
md5Transform (block);
}
index = 0;
} else
i = 0;
///* Buffer remaining input */
md5Memcpy(buffer, inbuf, index, i, inputLen - i);
}
/*
md5Final整理和填写输出结果
*/
private void md5Final () {
byte[] bits = new byte[8];
int index, padLen;
///* Save number of bits */
Encode (bits, count, 8);
///* Pad out to 56 mod 64.
index = (int)(count[0] >>> 3) & 0x3f;
padLen = (index < 56) ? (56 - index) : (120 - index);
md5Update (PADDING, padLen);
///* Append length (before padding) */
md5Update(bits, 8);
///* Store state in digest */
Encode (digest, state, 16);
}
/* md5Memcpy是一个内部使用的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];
}
/*
md5Transform是MD5核心变换程序,有md5Update调用,block是分块的原始字节
*/
private void md5T
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基本功能: 1 、客人签写留言 2 、基本的UBB支持,如[url]http://www.java.com[/url],[color="red"]红色字[/color] 3 、ctrl+enter可提交留言 4 、搜索留言 5 、悄悄话功能 安全: 1 、解决了连串字母将表格撑大问题 2 、用户名与留言内容不能太长或为空 3 、用户不能冒充版主留言 4 、屏垃圾语言功能 管理: 默认页为/admin/login.do 9 、留言簿基本参数的设置如留言簿标题,每页显示条数 10、设置版主信息 11、设置管理员用户名、密码 12、回复留言、编辑留言、删除留言 13、设置悄悄话功能的开启与关闭 14、垃圾语言过滤 15、在线更改最大留言字节数
资源推荐
资源详情
资源评论
收起资源包目录
JSP移动留言薄源码(oracle 9i + jsp)- 经典的JSP留言薄源码 (316个子文件)
MD5.class 9KB
SysInfo.class 6KB
SysUtil.class 6KB
SearchResult.class 4KB
EditGuestInfo.class 4KB
MasterIndex.class 4KB
noteindex.class 4KB
Editsysconfig.class 4KB
Index.class 3KB
Index.class 3KB
adminindex.class 3KB
updatesysconfig.class 3KB
LeaveWordForm.class 3KB
SaveRevertGuestInfo.class 3KB
RevertGuestInfo.class 3KB
updatenote.class 3KB
adminupdate.class 3KB
DataBaseUtil.class 3KB
DataBaseConnection.class 3KB
SysConfigForm.class 3KB
LoginCheck.class 3KB
UpdateMaster.class 3KB
LeaveWordSave.class 3KB
UpdateEditGuestInfo.class 3KB
AuditGuestInfo.class 3KB
DeleteGuestInfo.class 3KB
BatchGuestListDel.class 2KB
LockIP.class 2KB
EncodingFilter.class 2KB
MasterForm.class 2KB
Login.class 2KB
AdminInfo.class 2KB
ShowMasterInfo.class 2KB
ShowBulletin.class 2KB
Help.class 2KB
LeaveWord.class 2KB
Search.class 1KB
BanIpList.class 1KB
Logout.class 1KB
SysLoadServlet.class 906B
SearchResultForm.class 800B
RevertGuestInfoForm.class 800B
NoteAdmin.class 768B
LoginForm.class 765B
.classpath 1KB
lunjilyb1.gif 7KB
lunjilyb4.gif 6KB
lunjilyb3.gif 4KB
8.gif 3KB
23.gif 3KB
24.gif 3KB
1.gif 3KB
21.gif 3KB
6.gif 3KB
10.gif 3KB
18.gif 3KB
17.gif 3KB
29.gif 3KB
27.gif 3KB
19.gif 3KB
28.gif 3KB
16.gif 3KB
9.gif 3KB
13.gif 3KB
22.gif 3KB
15.gif 2KB
lunjilyb2.gif 2KB
11.gif 2KB
3.gif 2KB
7.gif 2KB
26.gif 2KB
2.gif 2KB
4.gif 2KB
lunjiqxly.gif 2KB
25.gif 2KB
14.gif 2KB
12.gif 2KB
30.gif 2KB
5.gif 2KB
icon_editor_email.gif 1KB
icon_editor_quote.gif 1KB
icon_editor_url.gif 1KB
rm.gif 1KB
qt.gif 1KB
glow.gif 1KB
move.gif 1KB
shadow.gif 1KB
icon_editor_list.gif 1KB
fly.gif 1KB
icon_editor_code.gif 1KB
homepage.gif 1KB
icon_editor_underline.gif 1KB
icon_editor_italicize.gif 1KB
icon_editor_bold.gif 1KB
icon_editor_image.gif 1KB
url_1.gif 1KB
mp.gif 1KB
url_2.gif 1KB
p12.gif 1KB
messages3.gif 1KB
共 316 条
- 1
- 2
- 3
- 4
资源评论
- 一直在敏捷的路上2012-10-20有buG,无法运行,需要重新整合
qq6346534
- 粉丝: 17
- 资源: 66
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功