猿问

在 Laravel 中编码,在 Python 中解码

我正在使用 Laravel 的encryptString方法来加密我网站上的一些数据。这使用 OpenSSL 的 256 位 AES-CBC 加密,没有任何序列化。我现在正在尝试用 Python 解密该数据,但我不断收到有关密钥长度的错误,并且似乎无法弄清楚原因。


Example data to decrypt: eyJpdiI6ImdxY0VcLzFodmpISFV4allSWmJDdEpRPT0iLCJ2YWx1ZSI6IkxXd0ZJaUd2bTUweW5pNm0wUjQwOFM2N1wvWEs5SlYrNB4xNlR7Qkh1U3FvPSIsIm1hYyI6Ijc5ZWM0YTYxYjljZGFiNzgwNjY2NDU1ZmQ5Yjc1ZmJlOGU4NzBkMjQzMzA3MmVhYzE3NzY4ZmU1MWIyMjZlOTQifQ==


Example Key to use for decryption (from laravel .env):

base64:/AZejP0lh3McL/+Vy5yZcADdTcR65qnx5Jqinuw7raK=

我改变了这些值,所以实际上用这些值解密不会提供任何真实数据,只是认为它会很好,例如。然后我尝试在 Python 3.7 中解密这些数据:


import base64

from Crypto.Cipher import AES


def decrypt(enc, key):

    IV = 16 * '\x00'

    decobj = AES.new(key, AES.MODE_CBC, IV)

    data = decobj.decrypt(base64.b64decode(enc))

    print(str(data.decode()))


if __name__ == "__main__":

    key = b"/AZejP0lh3McL/+Vy5yZcADdTcR65qnx5Jqinuw7raK="

    decrypt("eyJpdiI6ImdxY0VcLzFodmpISFV4allSWmJDdEpRPT0iLCJ2YWx1ZSI6IkxXd0ZJaUd2bTUweW5pNm0wUjQwOFM2N1wvWEs5SlYrNB4xNlR7Qkh1U3FvPSIsIm1hYyI6Ijc5ZWM0YTYxYjljZGFiNzgwNjY2NDU1ZmQ5Yjc1ZmJlOGU4NzBkMjQzMzA3MmVhYzE3NzY4ZmU1MWIyMjZlOTQifQ==", key)

看起来这应该可行,但是当我运行它时出现错误:ValueError: Incorrect AES key length (60 bytes)所以我不确定我做错了什么。我试过填充/取消填充数据/键,但这似乎没有改变任何东西。我想知道我是否从 Laravel 获得了错误的用于解密的密钥,但从我在链接文档中可以看出,它应该只是我的 .env 文件中的 APP_KEY 。


如果有人可以帮助我或为我指明正确的方向,那就太棒了!


这个问题对于其他类似问题是独一无二的,因为我主要是想弄清楚我是否从 Laravel 获得了正确的 AES 密钥,我实际上并不太需要解密帮助,我只是想我从拉拉维尔。


萧十郎
浏览 205回答 3
3回答
随时随地看视频慕课网APP

相关分类

Python
我要回答