md5是不可逆的加密算法,java实现如下 /************************************************md5 算法的java beanlast modified:10,mar,2001 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取得的. */