簡體   English   中英

Python:如何使用hashlib.md5算法創建一個16個字符長的摘要?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM