2016-03-03 39 views
-1

我对数据安全实现相当陌生。我正在编写一个需要加密明文数据的Python代码。目前,我使用下面的AES加密实现对数据进行加密:AES密钥存储管理和Python中的腌制

https://pythonprogramming.net/encryption-and-decryption-in-python-code-example-with-explanation/

我有两个问题:

1)当使用加密方法,生成随机密钥。该密钥需要在解密方法中使用。我需要将密钥存储在一个文件中,以便稍后访问它。什么是适当的方法来保护存储在这个文件中的密钥,以及该文件应该采用什么格式(是.txt还是应该使用其他格式)?我一直在阅读方法来执行第二次加密来加密第一个密钥或类似的东西。但是用于第二次加密的第二个密钥是否会受到影响呢?

此外,我想避免使用用户生成的密码来保护加密密钥的方法。也许我应该为每个包含不同密钥的文件使用不同的编码方式?但我不知道如何做到这一点......

2)我想使用salting,以便相同的明文值产生不同的数据外观。根据我的理解,为了执行加密,我需要对随机盐和明文使用XOR,然后使用密钥对结果进行加密。在解密的时候,我需要使用密钥来解密字符串,然后使用与我在加密中使用的salt值相同的XOR,以便最后得到明文。

但是,我不太明白如何生成盐以及如何存储它。我怎样才能生成一个随机的盐值,它与XOR添加的明文具有相同的长度?而且,我可以使用相同的加密密钥来加密salt值吗?因为它是随机的,或者盐值根本不需要任何加密?

回答

0
  1. 坏消息是安全地存储密钥非常困难并且依赖于设备。许多设备都有某种形式的keystone,如果有的话。使用用户输入的密码每个尖齿是最安全的方法,但通常是烦人的用户。

  2. 随机盐是通过调用一个密码伪随机数发生器获得的,确切的函数是平台相关的,arc4random就是这样一个类似unix的函数。有两种方法,如果您不需要获取原始值,请使用HMAC等加密哈希。如果您需要能够反转操作,请使用AES等加密技术。

有很多关于密码学的信息,它是一个很大的主题。我的建议是做大量的学习,使用图书馆的方法来提问你想要完成的事情。