python实现AES加密与解密

 更新时间:2019年03月28日 16:11:47   作者:niuu  
这篇文章主要为大家详细介绍了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实现

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


# 如果text不足16位的倍数就用空格补足为16位
def add_to_16(text):
 if len(text.encode('utf-8')) % 16:
 add = 16 - (len(text.encode('utf-8')) % 16)
 else:
 add = 0
 text = text + ('\0' * add)
 return text.encode('utf-8')


# 加密函数
def encrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_CBC
 iv = b'qqqqqqqqqqqqqqqq'
 text = add_to_16(text)
 cryptos = AES.new(key, mode, iv)
 cipher_text = cryptos.encrypt(text)
 # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
 return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
 key = '9999999999999999'.encode('utf-8')
 iv = b'qqqqqqqqqqqqqqqq'
 mode = AES.MODE_CBC
 cryptos = AES.new(key, mode, iv)
 plain_text = cryptos.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
 e = encrypt("hello world") # 加密
 d = decrypt(e) # 解密
 print("加密:", e)
 print("解密:", d)

AES ECB加密的python实现

"""
ECB没有偏移量
"""
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


def add_to_16(text):
 if len(text.encode('utf-8')) % 16:
 add = 16 - (len(text.encode('utf-8')) % 16)
 else:
 add = 0
 text = text + ('\0' * add)
 return text.encode('utf-8')


# 加密函数
def encrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_ECB
 text = add_to_16(text)
 cryptos = AES.new(key, mode)

 cipher_text = cryptos.encrypt(text)
 return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_ECB
 cryptor = AES.new(key, mode)
 plain_text = cryptor.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
 e = encrypt("hello world") # 加密
 d = decrypt(e) # 解密
 print("加密:", e)
 print("解密:", d)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决Python3 struct报错argument for 's' must be a bytes object

    解决Python3 struct报错argument for 's'&

    这篇文章主要为大家介绍了解决Python3 struct报错argument for 's' must be a bytes object方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 利用Python进行音频信号处理和音乐生成的代码示例

    利用Python进行音频信号处理和音乐生成的代码示例

    随着计算机技术的快速发展,音频信号处理和音乐生成逐渐成为了Python程序员们的关注点,本文将介绍如何利用Python进行音频信号处理和音乐生成,包括基本概念、常用库的使用以及实际的代码示例,需要的朋友可以参考下
    2024-06-06
  • python中yaml配置文件模块的使用详解

    python中yaml配置文件模块的使用详解

    本篇文章主要介绍了python中yaml配置文件模块的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Python3.9又更新了:dict内置新功能

    Python3.9又更新了:dict内置新功能

    这篇文章主要介绍了Python3.9又更新了:dict内置新功能,从文档中,我们可以看到官方透露的对 dict、math 等组件增加的新特性,以及下一步的开发进展
    2020-02-02
  • Python虚拟环境virtualenv的安装与使用详解

    Python虚拟环境virtualenv的安装与使用详解

    virtualenv可以用来管理互不干扰的独立python虚拟环境,在有些场景下非常有用,下面这篇文章主要给大家介绍了Python虚拟环境virtualenv安装与使用的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • python3实现二叉树的遍历与递归算法解析(小结)

    python3实现二叉树的遍历与递归算法解析(小结)

    这篇文章主要介绍了python3实现二叉树的遍历与递归算法解析(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 如何运用sklearn做逻辑回归预测

    如何运用sklearn做逻辑回归预测

    这篇文章主要介绍了如何运用sklearn做逻辑回归预测问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • pygame实现俄罗斯方块游戏(基础篇2)

    pygame实现俄罗斯方块游戏(基础篇2)

    这篇文章主要为大家介绍了pygame实现俄罗斯方块游戏基础的第2篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • python实现简易数码时钟

    python实现简易数码时钟

    这篇文章主要为大家详细介绍了python实现简易数码时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python爬虫数据处理模块的安装使用教程

    Python爬虫数据处理模块的安装使用教程

    这篇文章主要为大家介绍了Python爬虫数据处理模块的安装使用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06

最新评论