TX云的对接需要计算这个,https://cloud.tencent.com/document/product/441/18853
就用案例提供的原文和案例提供的密匙,都算不正确,还望大佬指点一二。
【源码见下】
变量名 类 型 静态 数组 备 注 SecretKey 文本型
SecretKey =
“oaYWFO70LGDmcpfwo8uF1IInayysGtgZ” 调试输出 ( b64_hmac_sha1 ( #常量1, SecretKey
) )
返回 ( 0
) rstr_hmac_sha1 字节集 key 字节集 data 字节集
变量名 类 型 静态 数组 备 注 bkey 整数型 0 length 整数型 ipad 整数型 16 opad 整数型 16 i 整数型 数组容器 整数型 0 hash 整数型 0
rstr2binb ( key, bkey
) length =
取数组成员数 ( bkey
) 如果真 ( length > 16
) binb_sha1 ( bkey,
取字节集长度 ( key
) × 8, bkey
) 如果真 ( 取数组成员数 ( bkey
) < 16
) 重定义数组 ( bkey, 真, 16
) 变量循环首 ( 1, 16, 1, i
) ipad
[ i
] =
位异或 ( bkey
[ i
] , 909522486
) opad
[ i
] =
位异或 ( bkey
[ i
] , 1549556828
) 变量循环尾 ( ) rstr2binb ( data, 数组容器
) 加入成员 ( ipad, 数组容器
) binb_sha1 ( ipad, 512 +
取字节集长度 ( data
) × 8, hash
) 清除数组 ( 数组容器
) 加入成员 ( opad, hash
) binb_sha1 ( opad, 512 + 160, 数组容器
) 返回 ( binb2rstr ( 数组容器
) )
hex_hmac_sha1 文本型 k 文本型 d 文本型
返回 ( rstr2hex ( rstr_hmac_sha1 ( 到字节集 ( k
) ,
到字节集 ( d
) )
) )
b64_hmac_sha1 文本型 k 文本型 d 文本型
返回 ( rstr2b64 ( rstr_hmac_sha1 ( 到字节集 ( k
) ,
到字节集 ( d
) )
) )
rstr2binb input 字节集 output 整数型
变量名 类 型 静态 数组 备 注 inputlength 整数型 outputlength 整数型 i 整数型 jp 整数型
inputlength =
取字节集长度 ( input
) 重定义数组 ( output, 假,
右移 ( inputlength, 2
) )
outputlength =
取数组成员数 ( output
) 如果真 ( outputlength <
右移 ( inputlength × 8, 5
) + 1
) 重定义数组 ( output, 真,
右移 ( inputlength × 8, 5
) + 1
) 变量循环首 ( 0, outputlength, 1, i
) 如果真 ( i ≥ outputlength
) 跳出循环 ( ) output [ i + 1] = 0 变量循环尾 ( ) i = 0
变量循环首 ( 0, inputlength × 8, 8, i
) 如果真 ( i ≥ inputlength × 8
) 跳出循环 ( ) output
[ 右移 ( i, 5
) + 1
] =
位或 ( output
[ 右移 ( i, 5
) + 1
] ,
左移 ( 位与 ( input
[ i ÷ 8 + 1
] , 255
) , 24 - i % 32
) )
变量循环尾 ( ) binb_sha1 x 整数型 len 整数型 return 整数型
变量名 类 型 静态 数组 备 注 w 整数型 80 a 整数型 b 整数型 c 整数型 d 整数型 e 整数型 i 整数型 xlength 整数型 olda 整数型 oldb 整数型 oldc 整数型 oldd 整数型 olde 整数型 j 整数型 t 整数型 ret 文本型 tmp 整数型
xlength =
取数组成员数 ( x
) tmp =
左移 ( 右移 ( len + 64, 9
) , 4
) + 16
如果真 ( xlength < tmp
) 重定义数组 ( x, 真, tmp
) x
[ 右移 ( len, 5
) + 1
] =
位或 ( x
[ 右移 ( len, 5
) + 1
] ,
左移 ( 128, 24 - len % 32
) )
x
[ 左移 ( 右移 ( len + 64, 9
) , 4
) + 16
] = len
xlength =
取数组成员数 ( x
) a = 1732584193
b = -271733879
c = -1732584194
d = 271733878
e = -1009589776
变量循环首 ( 0, xlength, 16, i
) 如果真 ( i ≥ xlength
) 跳出循环 ( ) olda = a oldb = b
oldc = c
oldd = d
olde = e
变量循环首 ( 0, 80, 1, j
) 如果真 ( j ≥ 80
) 跳出循环 ( ) 如果 ( j < 16
) w
[ j + 1
] = x
[ i + j + 1
] w
[ j + 1
] =
bit_rol ( 位异或 ( w
[ j - 3 + 1
] , w
[ j - 8 + 1
] , w
[ j - 14 + 1
] , w
[ j - 16 + 1
] ) , 1
) t =
safe_add ( safe_add ( bit_rol ( a, 5
) ,
sha1_ft ( j, b, c, d
) ),
safe_add ( safe_add ( e, w
[ j + 1
] ) ,
sha1_kt ( j
) )
) e = d
d = c
c =
bit_rol ( b, 30
) b = a
a = t
变量循环尾 ( ) a =
safe_add ( a, olda
) b =
safe_add ( b, oldb
) c =
safe_add ( c, oldc
) d =
safe_add ( d, oldd
) e =
safe_add ( e, olde
) 变量循环尾 ( ) 重定义数组 ( return, 假, 5
) return
[ 1
] = a
return
[ 2
] = b
return
[ 3
] = c
return
[ 4
] = d
return
[ 5
] = e
变量名 类 型 静态 数组 备 注 output 字节集 length 整数型 i 整数型
length =
取数组成员数 ( input
) × 32
变量循环首 ( 0, length, 8, i
) 如果真 ( i ≥ length
) 跳出循环 ( ) output = output +
到字节集 ( 到字节 ( 位与 ( 逻辑右移 ( input
[ 右移 ( i, 5
) + 1
] , 24 - i % 32
) , 255
) )
) 变量循环尾 ( ) 返回 ( output
) 变量名 类 型 静态 数组 备 注 hex_tab 字节集 output 字节集 length 整数型 i 整数型 x 整数型
hex_tab =
{ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102
} length =
取字节集长度 ( input
) 变量循环首 ( 0, length, 1, i
) 如果真 ( i ≥ length
) 跳出循环 ( ) x = input
[ i + 1
] output = output +
到字节集 ( hex_tab
[ 位与 ( 逻辑右移 ( x, 4
) , 15
) + 1
] ) +
到字节集 ( hex_tab
[ 位与 ( x, 15
) + 1
] ) 变量循环尾 ( ) 返回 ( 到文本 ( output
) )
变量名 类 型 静态 数组 备 注 tab 文本型 0 output 文本型 len 整数型 i 整数型 j 整数型 triplet 整数型 input2 字节集
tab =
{ “A” ,
“B” ,
“C” ,
“D” ,
“E” ,
“F” ,
“G” ,
“H” ,
“I” ,
“J” ,
“K” ,
“L” ,
“M” ,
“N” ,
“O” ,
“P” ,
“Q” ,
“R” ,
“S” ,
“T” ,
“U” ,
“V” ,
“W” ,
“X” ,
“Y” ,
“Z” ,
“a” ,
“b” ,
“c” ,
“d” ,
“e” ,
“f” ,
“g” ,
“h” ,
“i” ,
“j” ,
“k” ,
“l” ,
“m” ,
“n” ,
“o” ,
“p” ,
“q” ,
“r” ,
“s” ,
“t” ,
“u” ,
“v” ,
“w” ,
“x” ,
“y” ,
“z” ,
“0” ,
“1” ,
“2” ,
“3” ,
“4” ,
“5” ,
“6” ,
“7” ,
“8” ,
“9” ,
“+” ,
“/” } len =
取字节集长度 ( input
) input2 = input +
{ 0, 0
} 变量循环首 ( 0, len, 3, i
) 如果真 ( i ≥ len
) 跳出循环 ( ) triplet =
位或 ( 左移 ( input2
[ i + 1
] , 16
) ,
选择 ( i + 1 < len,
左移 ( input2
[ i + 2
] , 8
) , 0
) ,
选择 ( i + 2 < len, input2
[ i + 3
] , 0
) )
变量循环首 ( 0, 4, 1, j
) 如果真 ( j ≥ 4
) 跳出循环 ( ) 如果 ( i × 8 + j × 6 > len × 8
) output = output +
“=” output = output + tab
[ 位与 ( 逻辑右移 ( triplet, 6
( 3 - j
) ), 63
) + 1
] 变量循环尾 ( ) 变量循环尾 ( ) 返回 ( output
) return =
位或 ( 左移 ( num, cnt
) ,
逻辑右移 ( num, 32 - cnt
) )
返回 ( return
) 变量名 类 型 静态 数组 备 注 lsw 整数型 msw 整数型 return 整数型
lsw =
位与 ( x, 65535
) +
位与 ( y, 65535
) msw =
右移 ( x, 16
) +
右移 ( y, 16
) +
右移 ( lsw, 16
) return =
位或 ( 左移 ( msw, 16
) ,
位与 ( lsw, 65535
) )
返回 ( return
) sha1_ft 整数型 t 整数型 b 整数型 c 整数型 d 整数型
如果真 ( t < 20
) 返回 ( 位或 ( 位与 ( b, c
) ,
位与 ( 位取反 ( b
) , d
) )
) 如果真 ( t < 40
) 返回 ( 位异或 ( b, c, d
) )
如果真 ( t < 60
) 返回 ( 位或 ( 位与 ( b, c
) ,
位与 ( b, d
) ,
位与 ( c, d
) )
) 返回 ( 位异或 ( b, c, d
) )
判断 ( t < 20
) 返回 ( 1518500249
) 判断 ( t < 40
) 返回 ( 1859775393
) 判断 ( t < 60
) 返回 ( -1894007588
) 返回 ( -899497514
) 逻辑左移 整数型 欲移动的整数 整数型 欲被移动的位数 字节型
置入代码 ( { 81, 139, 69, 8, 138, 77, 12, 211, 224, 89, 139, 229, 93, 194, 8, 0
} ) 返回 ( -1
) 逻辑右移 整数型 欲移动的整数 整数型 欲被移动的位数 字节型
置入代码 ( { 81, 139, 69, 8, 138, 77, 12, 211, 232, 89, 139, 229, 93, 194, 8, 0
} ) 返回 ( -1
)