python AES 加解密

python3与python2.7导入的模块不同,
两者模块导入及下载:pip install Cryptodome
为避免其他影响删除Crypto,PyCrypto,库  用uninstall。
Crypto,PyCrypto 两者好像不再维护升级了

# -*- coding: utf-8 -*-

try:
    ###python3  导入方式
    from Cryptodome.Cipher import AES
    from Cryptodome import Random
except ImportError:
    ###python2  导入方式
    from Crypto.Cipher import AES
    from Crypto import Random

from binascii import a2b_hex,b2a_hex
import binascii
from optparse import OptionParser
import json,os,time

def encrypted_text(key,data):
    try:
        # iv = Random.new().read(AES.block_size)  ##生成长度等于AES块大小的不可重复的密钥向量
        iv = b"lskdmfncjfkgmvnb" ### iv 必须为16位,自定义
        mycipher = AES.new(key, AES.MODE_CFB, iv) # 使用key和iv初始化AES对象, 使用MODE_CFB模式
        ciphertext = iv + mycipher.encrypt(data.encode()) # 将iv(密钥向量)加到加密的密文开头,一起传输
        encrypted_data = b2a_hex(ciphertext)[16:]
        return ciphertext
    except Exception as e:
        print(e)

def decrypted_text(key,ciphertext):
    try:
        # iv = Random.new().read(AES.block_size)  ##生成长度等于AES块大小的不可重复的密钥向量
        iv = b"lskdmfncjfkgmvnb" ### iv 必须为16位,自定义
        mydecrypt = AES.new(key, AES.MODE_CFB, iv) 
        decrypttext = mydecrypt.decrypt(ciphertext[16:]) #使用新生成的AES对象,将加密的密文解密 
        text = decrypttext.decode()
        return json.loads(text)
    except Exception as e:
       print(e)

def main():
    key = "hello world"  #密码为16的倍数,不够补齐
    if len(key) <= 32:
        key = key.ljust(32)
    else:
        print("请检查密匙")
    key = key.encode("utf8")
    data = "Please enter encrypted data"
    encrypted_text(key, data) ##加密
    decrypted_text(key, data)##解密

if __name__ == "__main__":
    main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值