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标准库之随机数 (math包、random包)介绍
Nov 25 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
初学Python函数的笔记整理
Apr 07 Python
python从sqlite读取并显示数据的方法
May 08 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
视觉直观感受若干常用排序算法
Apr 13 Python
python实现多层感知器
Jan 18 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
详解Python3 pandas.merge用法
Sep 05 Python
python中删除某个元素的方法解析
Nov 05 Python
Python如何把不同类型数据的json序列化
Apr 30 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环境搭建的详细步骤
2016/06/30 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
师范生的个人求职信范文
2014/01/04 职场文书
村官学习十八大感想
2014/01/15 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
十八届三中全会感言
2014/03/10 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
捐款活动总结
2014/08/27 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python