pycrypto实现AES+Base64加密解密简单demo

简单demo

python实现

from Crypto import Random
from Crypto.Cipher import AES
 # TODO change to something with more entropy

data = 'helloworld1helloworld2helloworld3helloworld4helloworld5'
key = b"1234567890123456"

def pad(data):
	"""补齐加密文字为16的倍数
	缺1用\x01,缺2用\x02\x02,以此类推..."""
    length = 16 - (len(data) % 16)
    return (data + chr(length)*length).encode()

def unpad(data):
	"""去掉补齐用的字符"""
    return data[:-data[-1]]

def encrypt(data, key):
    IV = Random.new().read(16)  # 随机生成16位的初始化向量
    aes = AES.new(key, AES.MODE_CBC, IV)
    return base64.b64encode(IV + aes.encrypt(pad(data)))

def decrypt(encrypted, key):
    encrypted = base64.b64decode(encrypted)
    IV = encrypted[:16]
    aes = AES.new(key, AES.MODE_CBC, IV)
    return unpad(aes.decrypt(encrypted[16:]))
encrypt(data, key)
# 输出
b'VyWxLLJZ9uIvbb1H40FEzwTLZCt6sjuvR2puC27a2hrebh5vd7wqJyX2zq7AkFhzu/3QeVccnho7zaFc7jf3O6NGCT5ckECofl7o3a2UaHA='

decrypt(encrypt(data, key))
# 输出
b'helloworld1helloworld2helloworld3helloworld4helloworld5'

js实现

var key = CryptoJS.enc.Utf8.parse('1234567890123456'); // TODO change to something with more entropy

function encrypt(msgString, key) {
    // msgString is expected to be Utf8 encoded
    var iv = CryptoJS.lib.WordArray.random(16);
    var encrypted = CryptoJS.AES.encrypt(msgString, key, {
        iv: iv
    });
    return iv.concat(encrypted.ciphertext).toString(CryptoJS.enc.Base64);
}

function decrypt(ciphertextStr, key) {
    var ciphertext = CryptoJS.enc.Base64.parse(ciphertextStr);

    // split IV and ciphertext
    var iv = ciphertext.clone();
    iv.sigBytes = 16;
    iv.clamp();
    ciphertext.words.splice(0, 4); // delete 4 words = 16 bytes
    ciphertext.sigBytes -= 16;

    // decryption
    var decrypted = CryptoJS.AES.decrypt(ciphertext, key, {
        iv: iv
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值