quxinna
2021-04-04 21:17:04 +08:00
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 位为一组
修正了一下,大家看看有没有什么问题