我输入字符串参数 id 可能是任何长度(通常它在4-10个符号范围内,并且有几百万个)。我的要求是基于该参数生成字符串(对于相同的 id ,它应该是相同的字符串),其中base64解码表示具有正好32字节。 这是:
str = generate(id)
len(base64.b64decode(str)) == 32
def generate(id) = ???
所以我猜生成必须返回64encoded值。
有什么想法吗?我使用python 2.7。
由于
答案 0 :(得分:1)
如果没有2 id
可以从generate
生成相同的结果,则这是不可能的。 (如果该约束不成立,则无论id
是什么,都可以返回相同的字符串。)
有多少不同的字符串具有正好32个字符的base64解码是有限制的。您没有限制此函数应该用于id
的不同值的数量。因此,id
必须至少有2 generate
将返回相同的值。
答案 1 :(得分:0)
这样做:
import hashlib, base64
def generate(id):
m = hashlib.sha256()
m.update(id)
hashed = m.digest()
return base64.b64encode(hashed)