关于JS中CryptoJS加密在Python中如何实现
首先我们看看js中CryptoJS的使用写法
如下所示
var srcs = CryptoJS.enc.Utf8.parse("974680");
var k = CryptoJS.enc.Utf8.parse("qnbyzzwmdgghmcnm");
var en = CryptoJS.AES.encrypt(srcs, k, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var ddd = en.toString();
那么,在python中我们如何实现呢?
Python中提供了个模块Crypto,我们使用 from Crypto.Cipher import AES 来实现它
下面就来使用Python 实现JS中CryptoJS的加密功能
完整的Python代码如下
from Crypto.Cipher import AES
import base64
BLOCK_SIZE = 16 # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
def aesEncrypt(key, data):
'''
AES的ECB模式加密方法
:param key: 密钥
:param data:被加密字符串(明文)
:return:密文
'''
key = key.encode('utf8')
# 字符串补位
data = pad(data)
cipher = AES.new(key, AES.MODE_ECB)
# 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
result = cipher.encrypt(data.encode())
encodestrs = base64.b64encode(result)
enctext = encodestrs.decode('utf8')
print(enctext)
return enctext
def aesDecrypt(key, data):
'''
:param key: 密钥
:param data: 加密后的数据(密文)
:return:明文
'''
key = key.encode('utf8')
data = base64.b64decode(data)
cipher = AES.new(key, AES.MODE_ECB)
# 去补位
text_decrypted = unpad(cipher.decrypt(data))
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
if __name__ == '__main__':
key = 'qnbyzzwmdgghmcnm' # 需要16位
data = '974598'
ecdata = aesEncrypt(key, data) # 加密
aesDecrypt(key, ecdata) # 解密