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开发中range()函数用法实例分析
Nov 12 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
python实现三次样条插值
Dec 17 Python
python感知机实现代码
Jan 18 Python
Python 移动光标位置的方法
Jan 20 Python
Python 支付整合开发包的实现
Jan 23 Python
python科学计算之narray对象用法
Nov 25 Python
django 取消csrf限制的实例
Mar 13 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 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
第十节--抽象方法和抽象类
2006/11/16 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
在Python中使用next()方法操作文件的教程
2015/05/24 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
应届生高等护理求职信
2013/10/12 职场文书
创业计划书中要认真思考的问题
2013/12/28 职场文书
五水共治捐款倡议书
2014/05/14 职场文书
践行三严三实心得体会
2014/10/13 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript
Python基于百度API识别并提取图片中文字
2021/06/27 Python
maven依赖的version声明控制方式
2022/01/18 Java/Android
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server