java实现md5加密功能.doc

上传人:M****1 文档编号:558065899 上传时间:2023-03-30 格式:DOC 页数:10 大小:54.51KB
返回 下载 相关 举报
java实现md5加密功能.doc_第1页
第1页 / 共10页
java实现md5加密功能.doc_第2页
第2页 / 共10页
java实现md5加密功能.doc_第3页
第3页 / 共10页
java实现md5加密功能.doc_第4页
第4页 / 共10页
java实现md5加密功能.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《java实现md5加密功能.doc》由会员分享,可在线阅读,更多相关《java实现md5加密功能.doc(10页珍藏版)》请在金锄头文库上搜索。

1、在java编程中有时候设计的时候要将铭文加密,个人推荐用md5加密,比较安全,并且是单向的:源代码如下,已经运行过,可以顺利执行的public class MD5 /* 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 7. 这里把它们实现成为static final是表示了只读,切能在同一个进程空间内的多个 8. Instance间共享*/ static final int S11 = 7; static final int S12 = 12; static final int S13 = 17; static final int S14 = 22

2、; 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; stati

3、c 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结构中 *

4、/ private long state = new long4; / state (ABCD) private long count = new long2; / number of bits, modulo 264 (lsb first) private byte buffer = new byte64; / input buffer /* digestHexStr是MD5的唯一一个公共成员,是最新一次计算结果的 16进制ASCII表示. */ public String digestHexStr; /* digest,是最新一次计算结果的2进制内部表示,表示128bit的MD5值. */

5、 private byte digest = new byte16; /* getMD5ofStr是类MD5最主要的公共方法,入口参数是你想要进行MD5变换的字符串 返回的是变换完的结果,这个结果是从公共成员digestHexStr取得的 */ public String getMD5ofStr(String inbuf) md5Init(); md5Update(inbuf.getBytes(), inbuf.length(); md5Final(); digestHexStr = ; for (int i = 0; i 16; i+) digestHexStr += byteHEX(dig

6、esti); return digestHexStr; / 这是MD5这个类的标准构造函数,JavaBean要求有一个public的并且没有参数的构造函数 public MD5() md5Init(); return; /* md5Init是一个初始化函数,初始化核心变量,装入标准的幻数 */ private void md5Init() count0 = 0L; count1 = 0L; /* Load magic initialization constants. state0 = 0x67452301L; state1 = 0xefcdab89L; state2 = 0x98badcfe

7、L; state3 = 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,

8、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

9、, long s, long ac) a += F (b, c, d) + x + ac; a = (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 (32 - s); a += b; return a; private long HH(long a, long b, long c, long d, long x, long s, long ac) a

10、 += H (b, c, d) + x + ac; a = (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 (32 - s); a += b; return a; /* 140. md5Update是MD5的主计算过程,inbuf是要变换的字节串,inputlen是长度,这个 函数由getMD5ofStr调用,调用之前需要调用md5init,因此把它

11、设计成private的 */ private void md5Update(byte inbuf, int inputLen) int i, index, partLen; byte block = new byte64; index = (int)(count0 3) & 0x3F; / /* Update number of bits */ if (count0 += (inputLen 3) (inputLen 29); partLen = 64 - index; / Transform as many times as possible. if (inputLen = partLen)

12、 md5Memcpy(buffer, inbuf, index, 0, partLen); md5Transform(buffer); for (i = partLen; i + 63 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+) outputoutpos + i = inputinpos + i; /* md5Transform是MD5核心变换程序,有md5Update调用,block是分块的原始字节 */ pri

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 服装配饰

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号