使用AWS的python中的解密+ base64问题

时间:2019-01-15 12:07:53

标签: python encryption base64

我在PostgreSQL数据库中有client_info表,其中要存储加密值的字段(地址)为1。但是,当我要将字段作为API结果发送时,我想对其解密并发送解密的地址。

下面是我的加密和解密函数(我也分别在进行base64编码/解码以及加密/解密)

PADDING = lambda s: s + (32 - len(s) % 32) * ' '

    def encrypt_info(str):
        try:
            encrypted_info = b64encode(obj.encrypt(settings.PADDING(str)))
            return encrypted_info
        except Exception as e:
            print("Error in encryption: %s", e.message)
            return str


    def decrypt_info(str):
        try:
            decrypted_info = obj.decrypt(b64decode(str)).rstrip()
            return decrypted_info
        except Exception as e:
            print("Error in decryption: %s", e.message)
            return str

其中obj是使用密钥的AES对象。 (出于安全原因,无法共享它。)

到目前为止,加密工作正常,每当插入新行时,地址字段都会被加密并存储在数据库中。

我面临的问题是:

  1. 对于加密的地址,decrypt_info给了我 正确的结果。
  2. 对于未加密的地址(     数据库中已存在的旧地址),在某些情况下会引发异常,但在某些情况下会引发异常     的情况下,decrypt_info()不会引发任何异常,我正在     诸如ƭH.e̪Cs8Lqڎ����〜Sp��。

我希望该功能在所有情况下都能正常工作。你能帮我吗? 我找到了一些函数来检查字符串是否为base64编码,然后执行该操作,但这在所有情况下均不起作用。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

没有可靠的方法来判断字符串是“原始”还是AES加密的结果。

如果要保持向后兼容性,则需要将一些标志和消息一起写入数据库,以区分新/旧数据。