1
quxinna OP x[len >> 5] |= 0x80 << len % 32
x[(((len + 64) >>> 9) << 4) + 14] = len 四个字节一组 数组排序长度*8 右移 5 位,或十六进制 80 十进制 128 左移数组排序长度*8 模 32 数组 数组排序长度*8 加 64 右移 9 位,左移 4 位,加 14,赋值长度 function safeAdd(x, y) { var lsw = (x & 0xffff) + (y & 0xffff) var msw = (x >>> 16) + (y >>> 16) + (lsw >>> 16) return (msw << 16) | (lsw & 0xffff) } x 和 y 为 32 位 x 取后 16 位加 y 取后 16 位的和 x 取前 16 位加 y 取前 16 位的和加 x 取后 16 位加 y 取后 16 位的和取头部 x 取前 16 位加 y 取前 16 位的和加 x 取后 16 位加 y 取后 16 位的和取头部加 x 取后 16 位加 y 取后 16 位的和 即 x+y function bitRotateLeft(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) } 32 位 num 左移 cnt 位,32 位 num 右移 32-cnt,连接起来 function binl2rstr(input) { var i var output = '' var length32 = input.length * 32 for (i = 0; i < length32; i += 8) { output += String.fromCharCode((input[i >> 5] >>> i % 32) & 0xff) } return output } 数组长度 5 位为一组,数组按字符连接起来 function rstr2binl(input) { var i var output = [] output[(input.length >> 2) - 1] = undefined for (i = 0; i < output.length; i += 1) { output[i] = 0 } var length8 = input.length * 8 for (i = 0; i < length8; i += 8) { output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32 } 数组按 32 位连接起来,数组成员长度 32 位为一组 修正了一下,大家看看有没有什么问题 |