专栏首页Python小屋Python使用AES算法进行加解密

Python使用AES算法进行加解密

本文要点在于Python扩展库pycrypto实现了大量密码学算法,可以拿来直接使用。

import string

import random

from Crypto.Cipher import AES

def keyGenerater(length):

'''生成指定长度的秘钥'''

if length not in (16, 24, 32):

return None

x = string.ascii_letters+string.digits

return ''.join([random.choice(x) for i in range(length)])

def encryptor_decryptor(key, mode):

return AES.new(key, mode, b'0000000000000000')

def AESencrypt(key, mode, text):

encryptor = encryptor_decryptor(key, mode)

return encryptor.encrypt(text)

def AESdecrypt(key, mode, text):

decryptor = encryptor_decryptor(key, mode)

return decryptor.decrypt(text)

if __name__ == '__main__':

text = '董付国 《Python程序设计》系列教材,清华大学出版社'

key = keyGenerater(16)

mode = random.choice((AES.MODE_CBC, AES.MODE_CFB, AES.MODE_ECB, AES.MODE_OFB))

if not key:

print('Something is wrong.')

else:

print('key:', key)

print('mode:', mode)

print('Before encryption:', text)

#明文必须以字节串形式,且长度为16的倍数

text_encoded = text.encode()

text_length = len(text_encoded)

padding_length = 16 - text_length%16

text_encoded = text_encoded + b'0'*padding_length

text_encrypted = AESencrypt(key, mode, text_encoded)

print('After encryption:', text_encrypted)

text_decrypted =AESdecrypt(key, mode, text_encrypted)

print('After decryption:', text_decrypted.decode()[:-padding_length])

代码连续运行2次的结果如下:

= RESTART: C:\Python 3.5\tttt.py =

key: pIfvcrQ7P1N4OKmR

mode: 2

Before encryption: 董付国 《Python程序设计》系列教材,清华大学出版社

After encryption: b";\xe8\x01\xd5\xc38e'\x1b\xb0[\x96u\xdd#y\xf4\xa1\x17y\x15\r5-\xc3\x1c\xe4\x9c-8\xef\xac@\xb7v\x92LN\x1f~\xe6\xd0U\t\xd6;C\x92|\xa0\x1e\xcf\xff\xb5\xeb\xf6cbU\xdc\xa0\xc6\x0ceoU4\x8f\x9f\xec\x0b\xc3\xd2\xfegT\xdd\xc5\x12<"

After decryption: 董付国 《Python程序设计》系列教材,清华大学出版社

>>>

= RESTART: C:\Python 3.5\tttt.py =

key: JH9rdP86pwHc5f0g

mode: 2

Before encryption: 董付国 《Python程序设计》系列教材,清华大学出版社

After encryption: b't\x04\xf6\x9d\xfc\x14z\xb2w\x82\xf8\xe8)\t\x84\x0cb\x15\x8c\xfc\xb7\x19\xf5\xd9\xa6\x82\xd1\x19Wn\xc1\xaf\xbe\xbfg)/\xa0\\G\xdc\xe5\x06\xf0\x13/]c\xc6?\xa3\xe0\xa1\xa1\xd0\xc4\xa5\x90\xc5\xa3@s\xef\xff\xfe\x12\x10\xdf\xaa\x8f\x95\xbcW\xd0Ah\x9f.\xa4,'

After decryption: 董付国 《Python程序设计》系列教材,清华大学出版社

本文分享自微信公众号 - Python小屋(Python_xiaowu),作者:董付国

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Python检查密码安全程度

    本文主要演示几种内置用法的用法和代码优化技巧,所以没有使用正则表达式。 import string def check(pwd): #密码必须至少包含6个字符...

    Python小屋屋主
  • Python为视频设置遮罩实现异形窗口播放

    为视频设置任意形状的遮罩窗口,使得只有这些指定区域中的视频画面可见,指定区域之外的所有画面都变为指定的颜色。

    Python小屋屋主
  • Python在线考试系统防作弊功能的思路和实现

    我自己用Python开发了一套教学管理软件,具有在线点名、提问、答疑、交作业、自测、在线考试、数据导入导出与汇总、Word试卷生成等多个功能,其中在线考试系统具...

    Python小屋屋主
  • PHP中的des加密类

    用户7657330
  • QQ二维码登录API源码

    小新哟
  • QQ二维码登录API源码

    小新哟
  • 关于排序算法的理解(一)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

    大黄大黄大黄
  • MarkDown轻量级标记语言

    ####1.标题 #一级标题 ##二级标题 ###三级标题 … ######六级标题 ####2.引用 >这个是引用 >是不是和电子邮件中的 ...

    sofu456
  • Docker 的生命周期

    Docker Daemon 是负责维护Docker 运行的守护进程,担负着资源管理、任务调度等多项功能。

    博文视点Broadview
  • 小心!智能合约再爆高危漏洞,两大加密货币直接变废纸!

    区块链大本营

扫码关注云+社区

领取腾讯云代金券