python3 aes加密_Python3 - AES 加密解密

#!/usr/bin/env python3

from Crypto.Cipher import AES

from Crypto import Random

from base64 import b64encode, b64decode

from Crypto.Util import Counter

from binascii import hexlify

print('```GENERAL```')

print('AES block size: {0}'.format(AES.block_size))

original_key = 'This is my k\u00eay!! The extra stuff will be truncated before using it.'

key = original_key.encode('utf-8')[0:32]

print('Original Key: {0}'.format(original_key))

print('Usable Key: {0}'.format(key))

print('Base64 Encoded key: {0}'.format(b64encode(key).decode('utf-8')))

message = '0123456789'.encode('utf-8')

print('Original Message: {0}'.format(message))

# MODE CFB

print('```MODE CFB```')

cfb_iv = Random.new().read(AES.block_size)

print('Base64 Encoded IV: {0}'.format(b64encode(cfb_iv).decode('utf-8')))

cfb_cipher_encrypt = AES.new(key, AES.MODE_CFB, cfb_iv)

cfb_msg_encrypt = b64encode(cfb_cipher_encrypt.encrypt(message))

print ('Mode CFB, Base64 Encoded, Encrypted message: {0}'.format( cfb_msg_encrypt.decode('utf-8')))

cfb_cipher_decrypt = AES.new(key, AES.MODE_CFB, cfb_iv)

cfb_msg_decrypt = cfb_cipher_decrypt.decrypt(b64decode(cfb_msg_encrypt)).decode('utf-8')

print('Mode CFB, Decrypted message: {0}'.format(cfb_msg_decrypt))

# MODE CTR

print('```MODE CTR```')

def ctr_pad_message(in_message):

# http://stackoverflow.com/questions/14179784/python-encrypting-with-pycrypto-aes

# We use PKCS7 padding

length = 16 - (len(in_message) % 16)

return (in_message + bytes([length])*length)

def ctr_unpad_message(in_message):

return in_message[:-in_message[-1]]

ctr_iv = int(hexlify(Random.new().read(AES.block_size)), 16)

print('CTR IV (int): {0}'.format(ctr_iv))

ctr_encrypt_counter = Counter.new(128, initial_value=ctr_iv)

ctr_decrypt_counter = Counter.new(128, initial_value=ctr_iv)

ctr_padded_message = ctr_pad_message(message)

print('Mode CTR, Padded message: {0}'.format(ctr_padded_message))

ctr_cipher_encrypt = AES.new(key, AES.MODE_CTR, counter=ctr_encrypt_counter)

ctr_msg_encrypt = b64encode(ctr_cipher_encrypt.encrypt(ctr_padded_message))

print('Mode CTR, Base64 Encoded, Encrypted message: {0}'.format( ctr_msg_encrypt.decode('utf-8')))

ctr_cipher_decrypt = AES.new(key, AES.MODE_CTR, counter=ctr_decrypt_counter)

ctr_msg_decrypt = ctr_cipher_decrypt.decrypt(b64decode(ctr_msg_encrypt))

ctr_unpadded_message = ctr_unpad_message(ctr_msg_decrypt)

print('Mode CTR, Decrypted message: {0}'.format(ctr_msg_decrypt))

print('Mode CTR, Unpadded, Decrypted message: {0}'.format(ctr_unpadded_message))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值