我想制作SHA256 hasher,它将保存文本文件中的输入和输出。我搜索了stackoverflow的答案,但它没有工作。我希望它写在文本文件中:
all = str("At: " + date + " you have encrypted: " + text + " into:" + hex_dig)
text_file.write(together)
虽然日期如下:
date = time.strftime("%Y-%m-%d %H:%M:%S")
我在示例的第一行给出了这个错误:TypeError: Can't convert 'bytes' object to str implicitly
。
答案 0 :(得分:2)
我猜测hex_dig
是一个字节对象(您是否使用digest
而不是hexdigest
来获取哈希?)。如果是这种情况,只需使用正确的功能就可以解决这个问题:
sha256_hasher = hashlib.sha256()
sha256_hasher.update(your_data_goes_here)
hex_dig = sha256_hasher.hexdigest()
其他,更常见的是,您尝试将str
和bytes
个对象连接在一起。你不能这样做。您需要将bytes对象转换为字符串。如果它只包含文本数据,您可以解码它:
hex_dig = hex_dig.decode("ascii")
或者,如果它只包含字节,并且您想要查看十六进制,则可以使用binascii.hexlify
(您还需要decode
,因为它返回一个字节):
import binascii
hex_dig = binascii.hexlify(hex_dig).decode("ascii")
顺便说一下,你不需要在str
函数调用中包装一个字符串,如果你想得到一个已经不是的对象的字符串表示,你只需要这样做一个字符串。你拥有的(或你想要的)已经是一个字符串,因此它是一个冗余的电话。你不能尝试连接不同类型的东西,并将所有内容包装在str
cal中,希望python能为你排序 - 它不会胜利(并且不应该如此&#39} #39; s模棱两可 - explicit is better than implicit
)。
答案 1 :(得分:0)
date = time.strftime("%Y-%m-%d %H:%M:%S")
all = "At: %s you have encrypted: %s into: %s" % (date, text, hex_dig)
text_file.write(all)
答案 2 :(得分:0)
对于像这样的案例,我强烈推荐使用format
方法。
您写道:
all = str("At: " + date + " you have encrypted: " + text + " into:" + hex_dig)
在format
语法中,它看起来像这样:
all = "At: {} you have encrypted: {} into:{}".format(date,text,hex_dig)
关于format
的好处是,它可以轻松处理各种数据类型到字符串(通常)的转换。
提示:如果您想指定哪个订单和/或重复占位符,可以将{}
设置为{0} {1} {2}
等。