在我的程序中有一个日志目录。日志目录的名称很长所以在我的python脚本中我使用哈希函数来获取唯一代码并将其附加到固定字符串即:
LOG_DIR = "abcdefghijklmnopqrstuvwxyz"
log_dir_hashed = hash(LOG_DIR)
new_log_dir = "log_%s" %log_dir_hashed
因为我是python的新手,请告诉我上面的代码是否有任何问题?如何在shell脚本中做类似的事情,以便散列后得到的python目录名和shell目录名的结果是相同的。
答案 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)