private long F(long l, long l1, long l2) { return l & l1 | ~l & l2; }
private long G(long l, long l1, long l2) { return l & l2 | l1 & ~l2; }
private long H(long l, long l1, long l2) { return l ^ l1 ^ l2; }
private long I(long l, long l1, long l2) { return l1 ^ (l | ~l2); }
private long FF(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l += F(l1, l2, l3) + l4 + l6; l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5); l += l1; return l; }
private long GG(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l += G(l1, l2, l3) + l4 + l6; l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5); l += l1; return l; }
private long HH(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l += H(l1, l2, l3) + l4 + l6; l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5); l += l1; return l; }
private long II(long l, long l1, long l2, long l3, long l4, long l5, long l6) { l += I(l1, l2, l3) + l4 + l6; l = (int) l << (int) l5 | (int) l >>> (int) (32L - l5); l += l1; return l; }
private void md5Update(byte abyte0[], int i) {// 补位操作,abyte0为需要进行MD5加密的字符串,i为字符串长度; byte abyte1[] = new byte[64]; int k = (int) (count[0] >>> 3) & 0x3f; if ((count[0] += i << 3) < (long) (i << 3)) count[1]++; count[1] += i >>> 29; int l = 64 - k; int j; if (i >= l) { md5Memcpy(buffer, abyte0, k, 0, l); md5Transform(buffer); for (j = l; j + 63 < i; j += 64) { md5Memcpy(abyte1, abyte0, 0, j, 64); md5Transform(abyte1); } k = 0; } else { j = 0; } md5Memcpy(buffer, abyte0, k, j, i - j); }
private void md5Final() {// 最终处理,将得到的128位(16字节)MD5码存放在digest数组中 byte abyte0[] = new byte[8]; Encode(abyte0, count, 8); int i = (int) (count[0] >>> 3) & 0x3f; int j = i >= 56 ? 120 - i : 56 - i; md5Update(PADDING, j); md5Update(abyte0, 8); Encode(digest, state, 16); }
private void md5Memcpy(byte abyte0[], byte abyte1[], int i, int j, int k) { for (int l = 0; l < k; l++) abyte0[i + l] = abyte1[j + l]; }
public class MD5 {<br /> static final int S11 = 7;<br /> static final int S12 = 12;<br /><br /> static final int S13 = 17;<br /> static final int S14 = 22;<br /> static final int S21 = 5;<br /> static final int S22 = 9;<br />