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常见的格式化输出小结
Dec 15 Python
详解Python3.6安装psutil模块和功能简介
May 30 Python
神经网络相关之基础概念的讲解
Dec 29 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
python安装pil库方法及代码
Jun 25 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
Python ini文件常用操作方法解析
Apr 26 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
Opencv求取连通区域重心实例
Jun 04 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
python读取和保存图片5种方法对比
2018/09/12 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
Django之模板层的实现代码
2019/09/09 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
pandas数据拼接的实现示例
2020/04/16 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
解决方案设计综合面试题
2015/08/31 面试题
教师业务学习制度
2014/01/25 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
授权委托书怎么写
2014/09/25 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS