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操作MongoDB基础知识
Nov 01 Python
详解Python的Django框架中的中间件
Jul 24 Python
Python获取指定文件夹下的文件名的方法
Feb 06 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
django的csrf实现过程详解
Jul 26 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
Python实现智慧校园自动评教全新版
Jun 18 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通用检测函数集合
2006/11/25 PHP
php foreach 参数强制类型转换的问题
2010/12/10 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
分享10段PHP常用代码
2015/11/11 PHP
php中的explode()函数实例介绍
2019/01/18 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
python登录并爬取淘宝信息代码示例
2017/12/09 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能
2019/04/26 HTML / CSS
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
业务员岗位职责
2013/11/16 职场文书
物理教学随笔感言
2014/02/22 职场文书
践行三严三实心得体会
2014/10/13 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技