MD5 加密算法 java 实现
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 的唯一一个公共成员,是最新一次计算结果的
评论0