python实现AES加密解密

543 阅读1分钟

这是js aes加密解密的python实现,一些网站加密可能用到。废话不多,直接上代码。

----转自我的知乎

'''
##加密参数:1 后面接明文进行加密
python cipher.py 1 whoname
##解密参数:0 后面接密文进行解密
python cipher.py 0 R9mzAKkT7fkeeicfelQusg==
'''

import base64
import sys

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

keys = ["abcdefghijklmnop",]  #16位密钥
ivs = ["abcdefghijklmnop",]   #16位偏移量
k_s = 0 
iv_s = 0

def getDAES(data):
    key=bytes(keys[k_s],encoding='utf8')
    iv=bytes(ivs[iv_s],encoding='utf8')
    cipher = AES.new(key,AES.MODE_CBC,iv)
    print(f'明文:{data}')
    plaintext = base64.b64decode(bytes(data,encoding='utf8'))
    msg = unpad(cipher.decrypt(plaintext),AES.block_size,'pkcs7')
    result=str(msg,encoding='utf8')
    return result

def getAES(data):
    key=bytes(keys[k_s],encoding='utf8')
    iv=bytes(ivs[iv_s],encoding='utf8')
    cipher = AES.new(key,AES.MODE_CBC,iv)
    print(f'密文:{data}')
    plaintext = bytes(data,encoding='utf8')
    msg = cipher.encrypt(pad(plaintext,AES.block_size,'pkcs7'))
    result=str(base64.b64encode(msg).decode('utf8'))
    return result


#test
if __name__ == '__main__':
    data=sys.argv[2]
    if sys.argv[1] == '0':
        r=getDAES(data)
    else:
        r=getAES(data)
    print(f'结果:{r}')