前端CryptoJS AES加密与Python 后端解密

前端CryptoJS AES加密与Python 后端解密

最近在模仿一个网站,前端使用CryptoJS进行AES加密,但是不知道其后端如何进行解密的

前端加密代码

var password = $("#password_input").val()

var key = CryptoJS.MD5(Math.random() + "").toString();

for (

t = CryptoJS.AES.encrypt(password, key,

{ mode: CryptoJS.mode.CBC,

padding: CryptoJS.pad.ZeroPadding}

),

password_encode = t.ciphertext.toString(CryptoJS.enc.Base64);

$("#password_input").val() != password_encode; )

$("#password_input").val(password_encode);

$("#encrypt_iv").val(t.iv.toString(CryptoJS.enc.Base64)),

$("#encrypt_key").val(t.key.toString(CryptoJS.enc.Base64))

发送给后端的相关数据

# 以下为密码为 123456

'password':'YJukIxdk6KglzHVPfT3C8A==',

'encrypt_key':'LEbiyNapP8dIbaJ1VA7Iz3zBtk93ex8oB56+ei6yhGE=',

'encrypt_iv':'M79vpevBUppA5EtNy2mYBw=='

根据上述数据,如何使用Python来将加密后的 password还原成 123456 或者判断是否密码相同?


回答:

这是我之前写的代码 你参考下

    from Crypto.Cipher import AES

def add_to_16(text):

while len(text) % 16 != 0:

text += '\0'

return str.encode(text) # 返回bytes

def decrypt_str(encrypted_text):

key = 'xjjdBg#aUSINGfg@' # 密码

aes = AES.new(add_to_16(key), AES.MODE_ECB)

return str(aes.decrypt(base64.decodebytes(bytes(encrypted_text, encoding='utf8'))).rstrip(b'\x0f').decode("utf-8"))

mode和padding需要你自己从js里面分析出来

以上是 前端CryptoJS AES加密与Python 后端解密 的全部内容, 来源链接: utcz.com/a/165482.html

回到顶部