【发布时间】:2015-07-02 03:25:47
【问题描述】:
我在C代码中做了两个SHA1,一个用于字符串,另一个用于整数,得到不同的结果。
SHA_init(&ctx);
SHA_update(&ctx, "1234", 4);
sha = SHA_final(&ctx);
unsigned n = 1234;
SHA_init(&ctx);
SHA_update(&ctx, &n, sizeof(n));
sha = SHA_final(&ctx);
string result: 7110eda4d09e62aa5e4a390b0a572acd2c220
integer result: c7f07b846cc46631c2079cdd7179afdd783d643
在python中,很容易得到字符串SHA1
sha1 = hashlib.sha1()
sha1.update('1234')
sha1.hexdigest()
'7110eda4d09e062aa5e4a390b0a572ac0d2c0220'
我们可以看到字符串结果与 C 代码相同。但是如何在python中获得整数SHA1?因为 python sha1 不支持整数。
我尝试了以下代码,但它无法获得与 C 代码相同的结果。
aint = unpack('>4B', pack('>I', 1234))
sha1 = hashlib.sha1()
sha1.update(bytearray(aint))
sha1.hexdigest()
'ac9928e78cf6ea117451ecd6654fea2adae73e21'
如何在python中做整数SHA1?
【问题讨论】:
-
提示:
map(ord, "1234") == [49, 50, 51, 52] != [210, 4] == [1234 & 0xff, 1234 >> 8] -
sha1.update(str(1234))怎么样? -
当然
sha1.update(str(1234))和`sha1.update('1234')`一样 -
您是否验证过 C 中 1234 的布局与
struct.pack产生的布局相匹配? -
size(n)返回 4 吗?