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之开始真正编程
Sep 12 Python
python去除文件中空格、Tab及回车的方法
Apr 12 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Python入门必须知道的11个知识点
Mar 21 Python
Pyinstaller将py打包成exe的实例
Mar 31 Python
Django中使用Celery的教程详解
Aug 24 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 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/03/13 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
js 文件引入实现代码
2010/04/23 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
JS画线(实例代码)
2013/11/20 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
Python多线程实例教程
2014/09/06 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
python 文件操作删除某行的实例
2017/09/04 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
python字符串的index和find的区别详解
2020/06/20 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
房地产出纳岗位职责
2013/12/01 职场文书
村干部承诺书
2014/03/28 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
工厂搬迁方案
2014/05/11 职场文书
优秀党员先进材料
2014/12/18 职场文书
联谊会开场白
2015/06/01 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android