base64加密

import base64
def to_base64(str_to_base64):return base64.b64.encode(str_to_base64.eccode('utf-8'))

base64解密

import base64
def get_base64(str_to_base64):     # base64解密return base64.b64decode(str_to_base64)

MD5加密(不可逆)

import hashlib"""
MD5 Message-Digest Algorithm,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),
用于确保信息传输完整一致。MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
update() 方法内传参为二进制数据  所以需要将字符串数据 encode()
作用:加密用户密码;保证数据唯一性(MD5可以保证唯一性);比较文件是否被篡改等
"""def get_md5(str):hash_md5 = hashlib.md5()hash_md5.update(str.encode("utf-8"))return hash_md5.hexdigest()

SHA1加密(不可逆)

"""
SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度更长,
它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位,因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢
"""
def get_sha1(str):hash_sha1 = hashlib.sha1()hash_sha1.update(str.encode("utf-8"))return hash_sha1.hexdigest()

RSA加解密

#! /usr/bin/python3
# -*- coding: utf-8 -*-
# @Time: 2022/2/15 13:22
# @Author: 一碗烈酒
import rsa
import os"""
rsa 加解密
加密:公钥加密,私钥解密;
签名:私钥签名,公钥验签。
"""class MyRSA:def __init__(self):# 生成公钥,私钥self.public_key, self.private_key = rsa.newkeys(nbits=512)def save_rsa(self, public_key_filename, private_key_filename, save_path):"""保存秘钥文件"""with open(os.path.join(save_path, public_key_filename), "wb") as f:f.write(self.public_key.save_pkcs1())with open(os.path.join(save_path, private_key_filename), "wb") as f:f.write(self.private_key.save_pkcs1())def read_rsa_public(self, public_key_filename):"""读取rsa公钥:param public_key_filename: rsa 公钥文件地址:return: 公钥"""with open(public_key_filename, 'rb') as publickfile:pub = publickfile.read()pubkey = rsa.PublicKey.load_pkcs1(pub)return pubkeydef read_rsa_private(self, private_key_filename):"""读取rsa私钥:param private_key_filename: rsa 私钥文件地址:return: 私钥"""with open(private_key_filename, 'rb') as privatefile:priv = privatefile.read()privkey = rsa.PrivateKey.load_pkcs1(priv)return privkeydef encrypt(self, str, public_key=None):"""使用公钥加密。如果传入了公钥,则使用传入的公钥加密;如果没有传入公钥,则使用初始化创建实例时的公钥加密。:param str: 待加密的字符串:param public_key: 公钥:return: 加密后的数据,bytes"""if public_key:rsa.encrypt(message=str.encode("utf-8"), pub_key=public_key)return rsa.encrypt(message=str.encode("utf-8"), pub_key=self.public_key)def decrypt(self, str, private_key=None):"""使用私钥解密. 如果传入了私钥,则使用传入的私钥解密;如果没有传入私钥,则使用初始化创建实例时的私钥解密。:param str: 待解密的数据:param private_key: 私钥:return: 解密后的数据,str"""if private_key:return rsa.decrypt(str, priv_key=private_key).decode("utf-8")return rsa.decrypt(str, priv_key=self.private_key).decode("utf-8")def sign(self, message, private_key, hash_method="SHA-256"):"""使用私钥进行签名. 默认hash算法为:'sha256',也可以使用 md5 或其他hash算法:param message: 要签名的数据:param private_key: 私钥:param hash_method: hash算法:return: 签名后的数据"""sign_result = rsa.sign(message=message, priv_key=private_key, hash_method=hash_method)return sign_resultdef verify(self, message, sign, public_key):"""验签,使用公钥验证签名是否正确。如果正确,则返回签名算法,否则返回验证失败:param message: 已加密的数据:param sign: 已签名的数据:param public_key: 公钥:return: 验签正确:返回签名算法;验签错误:返回验证失败 False"""try:verify = rsa.verify(message=message, signature=sign, pub_key=public_key)return verifyexcept rsa.VerificationError:return Falseif __name__ == "__main__":r = MyRSA()r.save_rsa("rsa_pub.pem", "rsa_priv.pem", "./")result = r.encrypt("nishiwode")print(result)sign_str = r.sign(result, r.private_key)print(sign_str)sign_end = r.verify(result, sign_str, r.read_rsa_private(private_key_filename="./rsa_priv.pem"))print(sign_end)if sign_end:end = r.decrypt(result)print(end)

AES加解密

# -*- encoding: utf-8 -*-
# CreateTime: 2022/2/20 20:00
# Author: @一碗烈酒from Crypto import Random
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex"""
pip install pycryptodome
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB
CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)  常用
ECB加密不需要iv
cryptor不能写在主函数中同时给加密函数与解密函数使用,所以加密和解密都要重新创建对象
"""class MyAES:def __init__(self, key, mode=AES.MODE_CBC, iv=Random.new().read(AES.block_size)):"""key 秘钥必须是16(AES-128),24, 32iv 长度等于AES块大小的不可重复的秘钥向量本类内实现了 ECB, CBC 两种加密模式,默认为 AES.MODE_CBC 加密模式"""self.key, self.mode, self.iv = key.encode(), mode, ivdef __add_to_16(self, text):""" 如果string不足16位则用空格补齐16位 """if len(text.encode()) % 16:add = 16 - (len(text.encode()) % 16)else:add = 0text += ("\0" * add)return text.encode()def encode_aes(self, text):""" 使用 AES 加密字符串 """# 初始化 AES 对象, cryptor不能写在主函数中同时给加密函数与解密函数使用,所以加密和解密都要重新创建对象if self.mode == AES.MODE_ECB:cryptos = AES.new(key=self.key, mode=self.mode)elif self.mode == AES.MODE_CBC:cryptos = AES.new(key=self.key, mode=self.mode, iv=self.iv)cipher_text = cryptos.encrypt(self.__add_to_16(text))# 由于AES加密后的字符串不一定是ascii字符集,所以转为16进制字符串return b2a_hex(cipher_text)def decode_aes(self, text):""" aes 解密 并去掉补足的空格"""# 初始化 AES 对象, cryptor不能写在主函数中同时给加密函数与解密函数使用,所以加密和解密都要重新创建对象if self.mode == AES.MODE_ECB:cryptos = AES.new(key=self.key, mode=self.mode)elif self.mode == AES.MODE_CBC:cryptos = AES.new(key=self.key, mode=self.mode, iv=self.iv)plain_text = cryptos.decrypt(a2b_hex(text))return bytes.decode(plain_text).rstrip("\0")if __name__ == '__main__':a = MyAES(key="this is a 16 key", mode=AES.MODE_CBC)# a = MyAES(key="this is a 16 key", mode=AES.MODE_ECB)result = a.encode_aes("nishiwode")print(result)r = a.decode_aes(result)print(r)

python加密解密方法相关推荐

  1. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  2. python des解密_python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...

  3. python如何加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  4. python 字符串加密解密_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安装PyCrypto, ...

  5. python加密解密 sha256_Python加密方法小结【md5,base64,sha1】

    本文实例总结了python加密方法.分享给大家供大家参考,具体如下: MD5加密: def md5(str): import hashlib m = hashlib.md5() m.update(st ...

  6. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件 [cpp] view plaincopy #import <CommonCrypto/CommonDigest. ...

  7. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

  8. C#常用加密解密方法(MD5加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  9. Linux-编写SHELL 加密解密方法

    Linux-编写SHELL 加密解密方法 我们在编写SHELL脚本时,有时候需要填写密码到脚本里,比如mysql备份脚本,这时我们就需要一个脚本加密解密的方法了,我使用GO语音执行Linux命令加密解 ...

最新文章

  1. 如何在Leangoo中创建企业
  2. Spark快速上手-WordCount案例
  3. 最长回文子序列(算法导论15-2
  4. 使用jquery获取url及url参数的方法及定义JQuery扩展方法
  5. 一个账号可以登录几台机器_干货:一个PubMed账号可以有这么多用处!
  6. 知识关联的价值还无法与人的关联的价值相比
  7. cmd对应linux sleep命令,linux sleep命令参数及用法详解(linux休眠延迟执行命令)
  8. 三次元的世界里,机械臂的手活儿也无敌了
  9. PHP常见概念混淆(五)之PHP类常量、静态属性和属性的区别
  10. Anaconda下载与安装详解
  11. 基于OpenCV的银行卡号识别系统实现(一)----- 银行卡号识别步骤
  12. Matlab 如何实现身份证号码快速识别
  13. 前端实现PDF预览打印
  14. react hook的setState后,不会重新render页面
  15. docker的容器间通信
  16. python微博情感分析,Python情感分析:鹿晗的粉丝们究竟原谅他了吗?
  17. 利用HTML自制鬼灭之刃动态壁纸
  18. HDU 6438 Buy and Resell 【贪心+思维+优先队列】
  19. css+js 实现炫酷的魔方旋转
  20. JAVA RPG游戏

热门文章

  1. 如何用Python打开realsenseD435相机并获取相机参数
  2. 2021-10-10 10:10:10
  3. json_tuple,get_json_object提取日志埋点信息
  4. 外网访问postgresql设置
  5. Solidworks装配体零件保存融合为一个实体
  6. 《区域分析与规划高级教程》读书笔记
  7. java 当前时间推后一年_Java 获取时间日期
  8. c++学习论坛推荐 强力推荐
  9. R语言学习笔记︱Echarts与R的可视化包——地区地图
  10. windows10更新后的不过 网络连接现实感叹号