Python 的AES加密与解密

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB

从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现

python 在 Windows下使用AES时要安装的是pycryptodome 模块   pip install pycryptodome

python 在 Linux下使用AES时要安装的是pycrypto模块   pip install pycrypto

CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv

AES CBC 加密的python实现

1 from Crypto.Cipher import AES
 2 from binascii import b2a_hex, a2b_hex
 3
 4
 5 # 如果text不足16位的倍数就用空格补足为16位
 6 def add_to_16(text):
 7     if len(text.encode('utf-8')) % 16:
 8         add = 16 - (len(text.encode('utf-8')) % 16)
 9     else:
10         add = 0
11     text = text + ('\0' * add)
12     return text.encode('utf-8')
13
14
15 # 加密函数
16 def encrypt(text):
17     key = '9999999999999999'.encode('utf-8')
18     mode = AES.MODE_CBC
19     iv = b'qqqqqqqqqqqqqqqq'
20     text = add_to_16(text)
21     cryptos = AES.new(key, mode, iv)
22     cipher_text = cryptos.encrypt(text)
23     # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
24     return b2a_hex(cipher_text)
25
26
27 # 解密后,去掉补足的空格用strip() 去掉
28 def decrypt(text):
29     key = '9999999999999999'.encode('utf-8')
30     iv = b'qqqqqqqqqqqqqqqq'
31     mode = AES.MODE_CBC
32     cryptos = AES.new(key, mode, iv)
33     plain_text = cryptos.decrypt(a2b_hex(text))
34     return bytes.decode(plain_text).rstrip('\0')
35
36
37 if __name__ == '__main__':
38     e = encrypt("hello world")  # 加密
39     d = decrypt(e)  # 解密
40     print("加密:", e)
41     print("解密:", d)

AES ECB加密的python实现

1 """
 2 ECB没有偏移量
 3 """
 4 from Crypto.Cipher import AES
 5 from binascii import b2a_hex, a2b_hex
 6
 7
 8 def add_to_16(text):
 9     if len(text.encode('utf-8')) % 16:
10         add = 16 - (len(text.encode('utf-8')) % 16)
11     else:
12         add = 0
13     text = text + ('\0' * add)
14     return text.encode('utf-8')
15
16
17 # 加密函数
18 def encrypt(text):
19     key = '9999999999999999'.encode('utf-8')
20     mode = AES.MODE_ECB
21     text = add_to_16(text)
22     cryptos = AES.new(key, mode)
23
24     cipher_text = cryptos.encrypt(text)
25     return b2a_hex(cipher_text)
26
27
28 # 解密后,去掉补足的空格用strip() 去掉
29 def decrypt(text):
30     key = '9999999999999999'.encode('utf-8')
31     mode = AES.MODE_ECB
32     cryptor = AES.new(key, mode)
33     plain_text = cryptor.decrypt(a2b_hex(text))
34     return bytes.decode(plain_text).rstrip('\0')
35
36
37 if __name__ == '__main__':
38     e = encrypt("hello world")  # 加密
39     d = decrypt(e)  # 解密
40     print("加密:", e)
41     print("解密:", d)
(0)

相关推荐

  • Python AES256加密

    基础知识 # 在Linux操作系统下,Python3的默认环境编码变为了utf-8编码,所以在编写代码的时候,字符串大部分都是以utf-8处理UTF-8:1byte = 8bit1个英文字符 = 1b ...

  • 什么是 AES

    AES是一种对称加密算法,它的相关概念在此不赘述. GCM ( Galois/Counter Mode) 指的是该对称加密采用Counter模式,并带有GMAC消息认证码. 在详细介绍AES-GCM之 ...

  • 我去!爬虫遇到JS逆向AES加密反爬,哭了

    大家好,我是辰哥~ 今天准备爬取某抑云音乐时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来 ...

  • 使用Python对数据进行AES加密和解密

    随着网络上爬虫的横行和猖獗,各大网站为了最大限度地限制自家数据被采集,纷纷加入了各种反爬手段,比如: 生成浏览器UA指纹识别: 用各种验证方式(短信.滑块.点选汉字.点击)进行识别: -- 这一类的反 ...

  • 嵌入式开发中的AES加密/解密算法,你知道吗?看完这篇你就明白了

    今天给大家推荐一篇文章,来自我的好朋友老程. 深耕嵌入式,技术扎实,他用数学的方式讲解嵌入式系统的开发,简单明了,很容易理解,同时给我们开发带来很好的理论指导思路. 他的内容实用性很强,强烈推荐大家关 ...

  • 安全系列之——手写 JAVA 加密、解密

    网络安全一般需要注意以下几个关键点: 完整性(Integrity):确保信息在传输过程中,没有被篡改. 私密性(Confidentiality):也就是通过加密,确保只有可信的实体可以看到这些信息. ...

  • C# 加密、解密PDF文档(基于Spire.Cloud.SDK for .NET)

    Spire.Cloud.SDK for .NET提供了接口PdfSecurityApi可用于加密.解密PDF文档.本文将通过C#代码演示具体加密及解密方法. 使用工具: Spire.Cloud.SDK ...

  • 最近全网都在搜的:Excel批量给多个工作表加密和解密的方法!

    自我提升也是一种修养数万Excel爱好者聚集地 2021年2月27日 周六 [Excel情报局|文案回收铺子] 常常一个人独自崩溃 又一个人悄悄自愈 成人的世界无非如此 我们都知道在同一个Excel工 ...

  • Python Crypto.Cipher加密包

    The Crypto.Cipher package contains algorithms for protecting the confidentiality of data. Crypto.Cip ...

  • RSA加密、解密、签名、验签的原理及方法

    一.RSA加密简介 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私 ...

  • PDF格式分析(十五)PDF安全(加密、解密)

    PDF加密方式目前已经增加为三种: 1.口令加密 2.证书加密 3.Adobe LiveCycle Rights Management 口令加密: 作为第一代PDF安全加密方式,到现在也一直广泛应用. ...