【发布时间】:2017-09-02 15:16:33
【问题描述】:
免责声明:我了解以下内容不适合在生产环境中提供“安全性”。它只是意味着比对存储在我系统上的敏感数据使用 XOR 或 rot13 “好一点”。
我将以下代码放在一起,以允许我对这些敏感值使用 AES 加密。 AES 需要 16 字节块;所以我需要填充。我想将该数据保存在文本文件中;所以我添加了base64编码:
from __future__ import print_function
from Crypto.Cipher import AES
import base64
crypto = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s: s[0:-ord(s[-1])]
def scramble(data):
return base64.b64encode(crypto.encrypt(pad(data)))
def unscramble(data):
return unpad(crypto.decrypt(base64.b64decode(data)))
incoming = "abc"
print("in: {}".format(incoming))
scrambled = scramble(incoming)
print("scrambled: {}".format(scrambled))
andback= unscramble(scrambled)
print("reversed : {}".format(andback))
对于python2;打印:
输入:abc
加扰:asEkqlUDiqlUpW1lw09UlQ==
反转:
对于python3;我遇到了
unpad = lambda s: s[0:-ord(s[-1])]
TypeError: ord() expected string of length 1, but int found
两个问题:
- python2 的“反向”路径有什么问题,为什么不打印“abc”?
- 我理解使用 python3 的错误消息;但我想知道:以适用于 python2 和 python3 的方式解决这个问题的正确、规范的方法是什么?
【问题讨论】:
标签: python encryption padding