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的源码浅要剖析Python的内存管理
Apr 16 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
Python英文文本分词(无空格)模块wordninja的使用实例
Feb 20 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
适合Python初学者的一些编程技巧
Feb 12 Python
Python-opencv实现红绿两色识别操作
Jun 04 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 Python
Python趣味挑战之教你用pygame画进度条
May 31 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读取flv文件的播放时间长度
2009/09/03 PHP
一步一步学习PHP(8) php 数组
2010/03/05 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
浅析Python中signal包的使用
2015/11/13 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Django 解决由save方法引发的错误
2020/05/21 Python
解决pip install psycopg2出错问题
2020/07/09 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
实习生求职自荐信
2014/02/07 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
学术研讨会主持词
2015/07/04 职场文书
公司董事任命书
2015/09/21 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js