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 随机数生成的代码的详细分析
May 15 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
Python实现统计单词出现的个数
May 28 Python
Python内建数据结构详解
Feb 03 Python
小小聊天室Python代码实现
Aug 17 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
Feb 13 Python
python3.7简单的爬虫实例详解
Jul 08 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
Python requests模块session代码实例
Apr 14 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异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
2021/03/09 Servers
javascript中万恶的function实例分析
2011/05/25 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
浅谈javascript中自定义模版
2015/01/29 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
跟老齐学Python之从格式化表达式到方法
2014/09/28 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
学生励志演讲稿
2014/01/06 职场文书
药品促销活动方案
2014/02/14 职场文书
汇源肾宝广告词
2014/03/20 职场文书
教师自查自纠材料
2014/10/14 职场文书
工作年限证明模板
2014/11/01 职场文书
信访工作个人总结
2015/03/03 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL