如何使 hashlib md5 的更新功能同时在 Python 2 和 Python 3 中工作?

问题描述 投票:0回答:3

我想创建一个

string_variable
的散列。

Python2中:

def get_hash_python2(string_variable):
  import hashlib
  m = hashlib.md5()
  m.update(string_variable) # this takes string as argument
  return m.digest()

Python3中:

def get_hash_python3(string_as_bytes)
  import hashlib
  m = hashlib.md5()
  m.update(string_as_bytes) # this takes bytes as argument
  return m.digest()

如何编写单个

get_hash
函数来获取与
Python2
Python3 兼容的 string_variable 的哈希值?

python python-3.x python-2.7 md5 hashlib
3个回答
1
投票

使用

str.encode
将字符串变量转换为hashlib可接受的适当形式

Python2 和 Python3

import hashlib

def get_hash(string_variable):
    m = hashlib.md5()
    m.update(string_variable.encode())
    return m.digest()

0
投票

如果我没记错的话,在 python3 中

m.update(b"string_as_bytes")

0
投票

当我编写代码以在 Python2 或 Python3 中运行时,我通常会同时拥有一个 Python2 版本和一个不同的 Python3 版本,在一个

if
中检查哪个版本。我通常会在版本测试中作弊,例如:

if bytes == str:
    def my_function():
        ...
        # Python2 version of code goes here.
        ...
else:
    def my_function():
        ...
        # Python3 version of code goes here.
        ...

本版本测试仅适用于Python2的2.6和2.7版本

要转换其中只有 0 到 255 之间数值的字符串,您可以这样做:

bytes_var = bytes(ord(x) for x in str_var)

这只适用于 Python3。通过将

bytes
更改为
bytearray
它在 Python2 和 Python3 中都有效。

© www.soinside.com 2019 - 2024. All rights reserved.