在Python中存储和读取文件中的加密字符串

在Python中存储和读取文件中的加密字符串,python,pycrypto,Python,Pycrypto,我使用AES(来自PyCrypto)加密密码并将其存储在文件中。该文件的格式为: user:username key:<encrypted key> 现在,如何从文件中读取密钥进行解密?如果我使用line.split(“:”),如果加密密钥本身具有“:”字符,会不会导致问题 加密时有没有办法避免“:”呢?还是有更好的方法来储存钥匙?我不能使用哈希,因为我需要一些其他功能的密钥。谢谢。将用户名存储在第一行,密码存储在第二行,如下所示 username p4ssw0rd 这样你就

我使用AES(来自PyCrypto)加密密码并将其存储在文件中。该文件的格式为:

user:username
key:<encrypted key>
现在,如何从文件中读取密钥进行解密?如果我使用line.split(“:”),如果加密密钥本身具有“:”字符,会不会导致问题


加密时有没有办法避免“:”呢?还是有更好的方法来储存钥匙?我不能使用哈希,因为我需要一些其他功能的密钥。谢谢。

将用户名存储在第一行,密码存储在第二行,如下所示

 username
 p4ssw0rd
这样你就不需要做这种事情了

虽然最好的解决方案是将这些东西存储在数据库中

现在,如何从文件中读取密钥进行解密?如果我使用line.split(“:”),如果加密密钥本身具有“:”字符,会不会导致问题

当然会,这就是为什么有第二个可选参数
max\u split

key, value = line.split(':', 1)
或者,您可以使用:

两者之间的区别在于当根本没有结肠时会发生什么;前者将返回一个元素,在尝试将其解压为两个变量时会给您一个
ValueError
,而后者只会给您一个空的



但是,值得注意的是,如果您使用的是Base 64,
从一开始就不会出现。Base 64使用的唯一字符是
A
-
Z
A
-
Z
0
-
9
+
//code>。有一些Base 64变体,其中可能有一个确实使用了
,但是Python的
Base 64
模块应用的标准版本没有使用。

您可以限制执行的拆分数量:

>>> line="key:foo:bar:baz"
>>> line.split(":", 1)
['key', 'foo:bar:baz']

只要您知道字段名中没有“:”,就可以了。

谢谢,但我需要它是key:value格式。我对每个用户都有多个属性,它们可以是任意顺序的。然后我郑重建议使用真正的格式。使用Python(例如JSON)真的很容易。比手工解析代码要少得多。哦,没错。对不起,我没意识到。缺乏睡眠。谢谢
key, _, value = line.partition(':')
>>> line="key:foo:bar:baz"
>>> line.split(":", 1)
['key', 'foo:bar:baz']