Python AES暗号化とJS AES暗号化

1354 ワード

import execjs
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

def js_aes(text):
    jscode = """
    function encryptByAES(pwd) {
        var cryptoJS = require("crypto-js");
        
        let i = cryptoJS.enc.Utf8.parse("12345678901234561234567890123456");
        let t = cryptoJS.enc.Utf8.parse(pwd);
        let o = cryptoJS.enc.Utf8.parse("1234567890123456");

        return cryptoJS.AES.encrypt(t, i, {
                    iv: o,
                    mode: cryptoJS.mode.CBC,
                    padding: cryptoJS.pad.Pkcs7
                }).ciphertext.toString()
    }
    """
    ctx = execjs.compile(jscode)
    encrypto = ctx.call("encryptByAES",text)

    return encrypto
    


def py_aes(text):
    key = b"12345678901234561234567890123456"   #     16
    text = text.encode("utf-8")

    cryptor = AES.new(key,AES.MODE_CBC,iv = b"1234567890123456")  
    pad = 16 - len(text) % 16
    text = text + (chr(pad) * pad).encode("utf-8")   #   JS    padding: cryptoJS.pad.Pkcs7
    ciphertext = cryptor.encrypt(text)

    return b2a_hex(ciphertext).decode("utf-8")


text = "!abc123  "
js_res = js_aes(text)
py_res = py_aes(text)

print (js_res ==py_res)
print (js_res)
print (js_res)