【发布时间】:2015-11-02 07:54:55
【问题描述】:
我正在使用 python,flask。我正在使用 AES 进行加密。它工作得很好,我很容易加密和解密数据。
为了保护加密密钥,我从配置文件中的应用程序表单中移动了我的加密密钥。首先我在配置文件中保存了一个变量,我在config.cfg 中声明了ENCRYPTION_KEY。
[Encryption]
ENCRYPTION_KEY = b'\xbf\xc0\x85)\x10nc\x94\x02)j\xdf\xcb\xc4\x94\x9d(\x9e[EX\xc8\xd5\xbfI{\xa2$\x05(\xd5\x18'
然后在我声明的初始化文件上:
app.config['ENCRYPTION_KEY'] = config.get('Encryption', 'ENCRYPTION_KEY')
我尝试从key = flask.config['ENCRYPTION_KEY'] 访问它。我在控制台中打印密钥只是为了确保该命令有效:
def encrypt_data(self, form_data):
key = current_app.config['ENCRYPTION_KEY']
print "KEY : " , key
cipher = AES.new(key)
//code...
现在,当我尝试从配置文件中使用此密钥时,我收到一条错误消息:
出现此消息只是因为我在配置文件中移动了该键,因为正如我之前所说,我对相同的方法使用相同的键并且它工作得很好? 谁能帮帮我,为什么会出现这个错误?
【问题讨论】:
-
您使用的是 Python 2 还是 Python 3?
print语句看起来像 Python 2,但是它的输出看起来像 Python 3。 -
@mhawke 我正在使用 Python 2.7.6
-
@EgzontinaK:这是不可能的。 Python 2 不会将密钥打印为带有前导
b的字节字符串。你是如何加载你的配置文件的?您是否有任何机会实际设置了ENCRYPTION_KEY = "b'\xbf\xc0\x85)\x10nc\x94\x02)j\xdf\xcb\xc4\x94\x9d(\x9e[EX\xc8\xd5\xbfI{\xa2$\x05(\xd5\x18'",即字符串实际上包含b前缀? -
@mhawke 我更新了我的问题,正如我写的那样,我只是将它添加到初始化文件中,我可以在字符串之前使用 b 前缀访问它,我只在配置中使用了单引号 ('')文件!
-
@EgzontinaK:ConfigParser 返回原始字符串,即反斜杠用额外的反斜杠转义,这会产生一个 92 个字符的字符串,包括
b前缀和周围的引号。请参阅我的答案以获取解决方案。
标签: python encryption configuration flask aes