0

所以这是交易。

我有一些数据。它是这样安排的,每行包含一个记录。每条记录由4个项目组成:

  1. 用户名
  2. 帐户名称
  3. 密码
  4. 评论

这些记录由:

因此,示例记录如下所示:

un0:ac0:password0:linkedtoemail1

现在,当应用程序关闭时,我使用 ARC4 加密所有数据,然后将其写入文件。并删除明文文件。

filin = open('file','r')
separator = '\n'
filout = open('temp','w')

for i in filin:

    b = ARC4.new('0123456789123456').encrypt(i)

    filout.write(b + separator)

在写作时,我\n在两条记录之间添加了一个。但是当再次解密时,我使用 : for i in filin其中 filin 是文件流对象。现在,当某些文本被加密时,一个\n字符就是加密字符串的一部分。因此,当我解密时,我得到了我不想要的结果。

告诉我是否有更好的方法来做到这一点。加密记录后,我应该在两条记录之间使用什么分隔符?当我解密数据时,我应该如何检测这个分隔符?请为您建议的任何解决方案发布代码。

我在 Linux Mint 机器上使用 Python 2.7。

4

3 回答 3

1

我的 2 美分是将您的用户数据放入字典并使用 json 对其进行编码,然后对其进行加密。

它将为您省去“寻找终结者”的麻烦,并且 json 编码功能也将处理任何必要的转义。

于 2013-05-29T09:25:15.820 回答
1

您也应该将记录分隔符加密为二进制文件。

原始加密文件中不应有任何分隔符,即使您可以逃脱它们(您不能轻易做到)

假设数据很容易放入内存,它可能是这样的:

with open('file') as filin:
    data = filin.read()

from Crypto.Cipher import ARC4 # a better cipher may fit here too
with open('temp','wb') as filout:
    b = ARC4.new('0123456789123456').encrypt(data)
    filout.write(b)

我不是安全专家,所以我不知道它有多安全。无论如何,我相信它比您在问题中尝试的方法更安全。

with open('temp','rb') as filin:
    data = ARC4.new('0123456789123456').decrypt(filin.read())
于 2013-05-29T09:13:10.787 回答
-1

您可以先写入下一条加密记录的长度。

filin = open('file','r')
separator = '\n'
filout = open('temp','w')

for i in filin:

    b = ARC4.new('0123456789123456').encrypt(i)

    filout.write(b.len() + separator)
    filout.write(b)

然后在阅读时,首先阅读数字,然后阅读数字指示的尽可能多的字符。

于 2013-05-29T09:15:33.813 回答