| */ 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 )
|
| 共8页: 上一页 [1] [2] [3] 4 [5] [6] [7] [8] 下一页 |
评论加载中…