Linux 命令等同于 python 中的 hash()



在我的程序中有一个日志目录。日志目录的名称很长,因此在我的python脚本中,我使用哈希函数来获取唯一代码并将其附加到固定字符串中,即:

LOG_DIR = "abcdefghijklmnopqrstuvwxyz"
 log_dir_hashed = hash(LOG_DIR)
 new_log_dir = "log_%s" %log_dir_hashed

由于我是python的新手,请告诉我上面的代码是否有任何问题? 还有如何在shell脚本中做类似的事情,以便散列后获得的python目录名称和shell目录名称的结果相同。

hash()是python的实现细节,__hash__ dunders甚至可以覆盖它的功能,所以你不应该那样使用它。它还具有一些可能令人惊讶的特性,例如:

# This is not a collision produced by the used hashing method, it is
# how hash() functions. The result though is a collision.
>>> hash(-2) == hash(-1)
True

使用众所周知的哈希,如 MD5 或 SHA1 等。如果您需要加密安全的日志目录,请根据该目录选择合适的哈希。看看 https://docs.python.org/3/library/hashlib.html。它们具有等效的命令行工具可用。

例如:

from hashlib import md5
log_dir_hashed = md5('abcdefghijklmnopqrstuvwxyz'.encode('utf-8')).hexdigest()
new_log_dir = "log_%s" % log_dir_hashed

比较蟒蛇:

>>> md5('abcdefghijklmnopqrstuvwxyz'.encode('utf-8')).hexdigest()
'c3fcd3d76192e4007dfb496cca67e13b'

和等效的命令行(一种方法):

 % echo -n 'abcdefghijklmnopqrstuvwxyz' | md5sum - | awk '{print $1}'
c3fcd3d76192e4007dfb496cca67e13b

Hash正在对你的目录进行加密,基本上是将你的数据转换为MD5/SHA或其他加密。

您可以在 shell 脚本中使用 crypt(Data) 来获得相同的结果。

例如。

log_dir_hashed=地穴(LOG_DIR)

最新更新