2 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
嘗試https://en.wikipedia.org/wiki/Ascii85及其 URL 安全變體以獲得更密集的表示。
當(dāng)然,您必須對(duì)原始字節(jié)進(jìn)行編碼。(此外,從加密的角度來看,MD5 是一個(gè)糟糕的選擇,SHA2 更好。)

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以對(duì)數(shù)據(jù)進(jìn)行哈希處理,然后使用 base64 對(duì)哈希進(jìn)行編碼,而不是直接獲取十六進(jìn)制摘要:
s = '%s %s' % (username, datetime.datetime.now())
digest = hashlib.md5(s.encode('utf-8')).digest()
token = base64.b64encode(digest)
這使用所有 26×2+10 = 62 個(gè)字母數(shù)字字符,加上+和/。
您的實(shí)現(xiàn)可能會(huì)產(chǎn)生如下內(nèi)容:
d88cc7dea0fee57975187d4b30950f7b
用 base64 編碼會(huì)稍微減少長度:
2IzH3qD+5Xl1GH1LMJUPew==
然而,如果你想避免沖突,你需要增加摘要的長度——所以使用像 SHA512 這樣的散列函數(shù),而不是 MD5,甚至只是生成一個(gè)隨機(jī)數(shù)!
添加回答
舉報(bào)