Linux命令相当于python中的hash()

时间:2016-04-20 07:25:57

标签: python linux

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

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

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

2 个答案:

答案 0 :(得分:4)

hash()是python的一个实现细节,__hash__ dunders甚至可以覆盖它的功能,所以你不应该像这样使用它。它也有一些surprising properties,如:

# 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

比较python:

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

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

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

答案 1 :(得分:-3)

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

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

EG。

log_dir_hashed =隐窝(LOG_DIR)