如何让hashlib md5的update函数在Python 2和Python 3中都能工作?

k97glaaz  于 2023-03-04  发布在  Python
关注(0)|答案(3)|浏览(122)

我想创建一个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函数来获取string_variable的哈希值,同时兼容Python2Python3

nle07wnf

nle07wnf1#

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

都在巨蟒2号和巨蟒3号上

import hashlib

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

5jvtdoz22#

在python3中如果我没猜错的话

m.update(b"string_as_bytes")
lc8prwob

lc8prwob3#

当我写代码在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中都有效。

相关问题