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入门篇之数字
Oct 20 Python
Python中用于转换字母为小写的lower()方法使用简介
May 19 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
Python正则捕获操作示例
Aug 19 Python
python中reduce()函数的使用方法示例
Sep 29 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 Python
Python简单处理坐标排序问题示例
Jul 11 Python
postman传递当前时间戳实例详解
Sep 14 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
python中return不返回值的问题解析
Jul 22 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
Symfony2函数用法实例分析
2016/03/18 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
Python 字符串定义
2009/09/25 Python
详解django三种文件下载方式
2018/04/06 Python
Python实现图片拼接的代码
2018/07/02 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
pybind11在Windows下的使用教程
2019/07/04 Python
基于Python计算圆周率pi代码实例
2020/03/25 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
2014年公司植树节活动方案
2014/03/04 职场文书
文案策划岗位职责
2015/02/11 职场文书
办公室主任个人总结
2015/02/28 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS