![](/img/trans.png)
[英]How to update hashlib.md5 hasher using existing hasher in python?
[英]Python: How to create a 16 character long digest using hashlib.md5 algorithm?
PHP的md5函數采用可選的第二個參數,如果為true,則返回較小的長度為16的哈希值,而不是正常的32個字符長的哈希值。
我們如何使用python的hashlib.md5
做同樣的hashlib.md5
。
“可選的第二個參數,如果為true,則返回較小的長度為16的哈希,而不是正常的32個字符長的哈希。”
這是不正確的:第二個參數$raw_output
指定輸出應為十六進制 (hex)編碼還是原始二進制字符串。 哈希長度不變,而是編碼字符串的長度。
import hashlib
digest = hashlib.md5("asdf").digest() # 16 byte binary
hexdigest = hashlib.md5("asdf").hexdigest() # 32 character hexadecimal
第一個應該只在您的代碼內使用,而不應提供給用戶,因為它將包含不可打印的字符。 這就是為什么要向用戶顯示哈希值時,應始終使用hexdigest
函數的原因。
給那些試圖在Python 3中獲取哈希值的人的注釋:
因為在使用hashlib
進行哈希處理之前必須先對Unicode對象進行編碼,並且因為Python 3中的字符串默認情況下是Unicode(與Python 2不同),所以您需要使用.encode
方法對字符串進行編碼。 使用上面的示例,並假設使用utf-8編碼:
import hashlib
digest = hashlib.md5("asdf".encode("utf-8")).digest() # 16 byte binary
hexdigest = hashlib.md5("asdf".encode("utf-8")).hexdigest() # 32 character hexadecimal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.