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中encode()方法的使用简介
May 18 Python
基于python实现微信模板消息
Dec 21 Python
图文讲解选择排序算法的原理及在Python中的实现
May 04 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
Python set常用操作函数集锦
Nov 15 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
python中正则表达式与模式匹配
May 07 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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反射应用示例
2014/02/25 PHP
PHP微信红包API接口
2015/12/05 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python之eval()函数危险性浅析
2014/07/03 Python
浅析Python中的多重继承
2015/04/28 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python中scikit-learn机器代码实例
2018/08/05 Python
Python函数式编程实例详解
2020/01/17 Python
为什么需要版本控制?
2013/08/08 面试题
送货司机岗位职责
2013/12/11 职场文书
幼教简历自我评价
2014/01/28 职场文书
金融管理应届生求职信
2014/02/20 职场文书
保密协议书范本
2014/04/22 职场文书
接收函格式
2015/01/30 职场文书
司机个人年终总结
2015/03/03 职场文书
综合测评自我评价
2015/03/06 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
公司会议开幕词
2016/03/03 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript