python的aes的ecb加密_Python中的AES-ECB加密

该博客讲述了作者尝试将JavaScript的AES-ECB加密代码转换为Python的过程。作者使用了hashlib库进行MD5和SHA256计算,并通过Crypto库进行AES加密。然而,遇到了ValueError,指出AES密钥长度不正确。尽管JavaScript版本可以正常工作,但Python代码在创建AES cipher时出现了问题。作者寻求帮助来解决这个问题。
摘要由CSDN通过智能技术生成

我的主要目标是将这个javascript重写成pythonpassword = "AAAABBBBCCCC";

passwordMd5 = CryptoJS.MD5(password);

//e1b6b2b3211076a71632bbf2ad0edc05

passwordKey = CryptoJS.SHA256(CryptoJS.SHA256(passwordMd5 + data.v1) + data.v2);

//4a5148da63f40e1bcd3e3225f9b79412b7aee745f4b7f831b9d0893d0d6d666f

encryptedPassword = CryptoJS.AES.encrypt(passwordMd5, passwordKey, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.NoPadding});

//U2FsdGVkX198V2FiYyEGAKISlXBcmad7V0scbooxQ8QMSmp84vtyAfHytynX2mrw

encryptedPassword = CryptoJS.enc.Base64.parse(encryptedPassword.toString()).toString(CryptoJS.enc.Hex);

//53616c7465645f5f7c57616263210600a21295705c99a77b574b1c6e8a3143c40c4a6a7ce2fb7201f1f2b729d7da6af0

这是我用python编写的代码

^{pr2}$

在七叶树.py(原件:here)import base64

import hashlib

from Crypto import Random

from Crypto.Cipher import AES

BS = 32

def pad(s): s + (BS - len(s) % BS) * chr(BS - len(s) % BS).encode()

def unpad(s): s[:-ord(s[len(s)-1:])]

class AESCipher(object):

def __init__(self, key):

self.key = key

def encrypt(self, message):

message = message.encode()

raw = pad(message)

cipher = AES.new(self.key, AES.MODE_ECB)

enc = cipher.encrypt(raw)

return base64.b64encode(enc).decode('utf-8')

def decrypt(self, enc):

enc = base64.b64decode(enc)

cipher = AES.new(self.key, AES.MODE_ECB)

dec = cipher.decrypt(enc)

return unpad(dec).decode('utf-8')

当我试图运行它时,它会给我一个错误:Traceback (most recent call last):

File "main.py", line 97, in

encryptedPassword = cipher.encrypt(passwordMd5)

File "AESCipher.py", line 31, in encrypt

cipher = AES.new(self.key, AES.MODE_ECB)

File "python\lib\site-packages\Crypto\Cipher\AES.py", line 206, in new

return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)

File "python\lib\site-packages\Crypto\Cipher\__init__.py", line 79, in _create_cipher

return modes[mode](factory, **kwargs)

File "python\lib\site-packages\Crypto\Cipher\_mode_ecb.py", line 177, in _create_ecb_cipher

cipher_state = factory._create_base_cipher(kwargs)

File "python\lib\site-packages\Crypto\Cipher\AES.py", line 92, in _create_base_cipher

raise ValueError("Incorrect AES key length (%d bytes)" % len(key))

ValueError: Incorrect AES key length (64 bytes)

我知道密钥的长度是64字节,但是javascript版本使用相同的passwordKey工作得很好。在

我不知道我的代码怎么了,救命啊!在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值