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用fork来创建子进程注意事项
Jul 03 Python
Python变量作用范围实例分析
Jul 07 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python中while和for的区别总结
Jun 28 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
Python调用.net动态库实现过程解析
Jun 05 Python
python如何更新包
Jun 11 Python
python3中数组逆序输出方法
Dec 01 Python
浅谈Python响应式类库RxPy
Jun 14 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/10/09 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
快速入门python学习笔记
2017/12/06 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
采购主管岗位职责
2014/02/01 职场文书
股权转让协议范本
2014/12/07 职场文书
现实表现材料范文
2014/12/23 职场文书
python办公自动化之excel的操作
2021/05/23 Python
浅析MongoDB之安全认证
2021/06/26 MongoDB
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis