【发布时间】:2021-10-25 02:55:25
【问题描述】:
我目前正在使用 Python 编写密码存储程序,尽管 C 可能会更快。过去一个小时左右,我一直在尝试找到一种将字节对象存储在 CSV 文件中的方法。我正在用自己的盐对密码进行哈希处理,然后将其存储,然后再次抓取以检查密码。当它存储在内存中时,它工作得很好。
salt = os.urandom(64)
hash = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
1000000
)
storage = salt + hash
salt_from_store = storage[:64]
hash_from_store = storage[64:]
但是,当我尝试将其存储在 CSV 文件中时,它不必一直运行,我得到一个错误,
TypeError: write() 参数必须是 str,而不是字节
所以,我使用,将它转换为字符串,
str(storage)
写得很好。但是,当我从文件中获取它时,它仍然是一个字符串,长度从 128(字节)到 300+(字符)。它也永远不一致。我不知道编码,所以我不能那样改变它,当我打印字节时,它是一堆带有反斜杠和 X 的字符
b'\xfd\x3a'
偶尔会出现一些随机的特殊字符。我不确定是否有办法将其转换为 int,然后将其转换回来。另一个问题是我找到了一种方法,通过改变
b"\xf1\x96"
到
"b\xf1\x96"
它打印编码的文本,而不是它组成的字节。但是,我不知道这是否是改变它的好方法,如果是,是否有办法在没有类似的情况下做到这一点
bytes[0] = '"'
bytes[1] = 'b'
【问题讨论】:
-
要写入字节,要么写入期望包含字节的内容,要么写入以某种方式表示字节的文本。 CSV 基本上是一种基于文本的格式。
-
好吗?你会详细说明吗?也许举个例子?还是你会说,“你做错了,但我不在乎帮你解决它”?
-
我写了一个答案。这些事情需要时间。也就是说,你是 expected to do some research yourself。例如,将
python convert bytes to strinto a search engine 之类的东西放入会很有帮助。 -
Python 对于任何受 I/O 限制的事物来说都足够快。
标签: python python-3.x encryption hash salt