python des,aes,rsa加解密的实现


Posted in Python onJanuary 16, 2021

AES加解密

AES 只是个基本算法,实现 AES 有几种模式,主要有 ECB、CBC、CFB 和 OFB  CTR,直接上代码,此处为AES加密中的CBC模式,EBC模式与CBC模式相比,不需要iv。

import base64from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
 
 
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
class AES3:
  def __init__(self, key):
    self.key = key
    self.mode = AES.MODE_CBC
    self.iv = self.key

  def _pad(self, text):
    key_len = len(self.key)
    pad = text + (key_len - len(text) % key_len) * chr(key_len - len(text) % key_len)
    return pad

  def _unpad(self, text):
    pad = ord(text[-1:])
    return text[0:-pad]

  # 加密函数
  def encrypt(self, text):
    length = 16
    count = len(text)
    if count % length != 0:
      add = length - (count % length)
    else:
      add = 0
    text = text + ('\0' * add)
    cryptor = AES.new(self.key.encode("utf8"), self.mode, self.iv.encode("utf8"))
    self.ciphertext = cryptor.encrypt(bytes(text, encoding="utf8"))
    # AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题,使用base64编码
    return base64.b64encode(b2a_hex(self.ciphertext)).decode('utf-8')

  # 解密函数
  def decrypt(self, text):
    decode = base64.b64decode(text)
    cryptor = AES.new(self.key.encode("utf8"), self.mode, self.iv.encode("utf8"))
    plain_text = unpad(cryptor.decrypt(decode))
    return a2b_hex(plain_text) .decode('utf8')

RSA公钥加密,私钥解密

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
import base64

# 私钥
private_key = '''-----BEGIN RSA PRIVATE KEY-----
5353dfggd
-----END RSA PRIVATE KEY-----
'''

# 公钥
public_key = '''-----BEGIN PUBLIC KEY-----
hfgghftetet
-----END PUBLIC KEY-----'''
def rsa_encrypt(message):
  """校验RSA加密 使用公钥进行加密"""
  cipher = Cipher_pkcs1_v1_5.new(RSA.importKey(public_key))
  cipher_text = base64.b64encode(cipher.encrypt(message.encode())).decode()
  return cipher_text


def rsa_decrypt(text):
  """校验RSA加密 使用私钥进行解密"""
  cipher = Cipher_pkcs1_v1_5.new(RSA.importKey(private_key))
  retval = cipher.decrypt(base64.b64decode(text), 'ERROR').decode('utf-8')
  return retval

DES加解密

from pyDes import *
import base64
class Des3(object):
  def __init__(self, key, iv):
    # 这里密钥key长度必须为16/24, ,偏移量ivs
    self.key = key
    self.mode = CBC
    self.iv = iv

  # 加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数
  def encrypt(self, text):
    des3 = triple_des(self.key, self.mode, self.iv, pad=None, padmode=PAD_PKCS5)
    data = des3.encrypt(text)
    data = base64.b64encode(data)
    return data.decode('utf-8')

  # 解密后,去掉补足的空格用strip() 去掉
  def decrypt(self, data):
    des3 = triple_des(self.key, self.mode, self.iv, pad=None, padmode=PAD_PKCS5)
    data = base64.b64decode(data)
    text = des3.decrypt(data)
    return text.decode('hex')

以上就是python des,aes,rsa加解密的实现的详细内容,更多关于python des,aes,rsa加解密的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现批量转换文件编码的方法
Jul 28 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
python3编码问题汇总
Sep 06 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
pandas object格式转float64格式的方法
Apr 10 Python
python实现字符串和字典的转换
Sep 29 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
django使用JWT保存用户登录信息
Apr 22 Python
Python新手学习装饰器
Jun 04 Python
Python实现简单的猜单词小游戏
Oct 28 Python
python flask开发的简单基金查询工具
Jun 02 Python
python math模块的基本使用教程
Jan 16 #Python
详解Python模块化编程与装饰器
Jan 16 #Python
删除pycharm鼠标右键快捷键打开项目的操作
Jan 16 #Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 #Python
python制作抽奖程序代码详解
Jan 15 #Python
python中PyQuery库用法分享
Jan 15 #Python
python中pdb模块实例用法
Jan 15 #Python
You might like
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
JSON与js对象序列化实例详解
2017/03/16 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
详解.vue文件解析的实现
2018/06/11 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
功能完善的小程序日历组件的实现
2020/03/31 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
生物技术研究生自荐信
2013/11/12 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
python多次执行绘制条形图
2022/04/20 Python
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis
MySQL池化框架学习接池自定义
2022/07/23 MySQL