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 相关文章推荐
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
python使用scrapy发送post请求的坑
Sep 04 Python
对python Tkinter Text的用法详解
Oct 11 Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
使用python求解迷宫问题的三种实现方法
Mar 17 Python
Python IO文件管理的具体使用
Mar 20 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与javascript实现变量交互的示例代码
2013/07/23 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
js 窗口抖动示例
2013/09/04 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
Promise扫盲贴
2019/06/24 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python实例一个类背后发生了什么
2016/02/09 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python绘制雪景图
2019/12/16 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
大一新生军训时的自我评价分享
2013/12/05 职场文书
护理中职生求职信范文
2014/02/24 职场文书
网络编辑求职信
2014/04/30 职场文书
合理化建议书范文
2015/09/14 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
2019年消防宣传标语集锦
2019/11/21 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
python 实现德洛内三角剖分的操作
2021/04/22 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js