python的加密方式
MD5加密
这是一种使用非常广泛的加密方式,不可逆的,在日常字符串加密中经常会用到,下面我简单介绍一下这种方式,主要用到Python自带的模块hashlib,测试代码如下,先创建一个md5对象,然后直接加密就行:
import hashlib
def MD5(string):
'''md5加密'''
h1 = hashlib.md5() # 创建md5对象
# 声明encode
h1.update(string.encode(encoding = 'utf-8'))
return h1.hexdigest()
if __name__ == "__main__":
string = "MD5加密"
print('MD5加密前为:' + string)
print('MD5加密后为:' + MD5(string))
运行结果:
MD5加密前为:MD5加密
MD5加密后为:e5c7bda34849527574a025bc06867c11
哈希加密
这里以SHA1(安全哈希)为例,简单介绍一下Python是如何进行哈希加密的,也用到hashlib这个模块,测试代码如下,非常简单,先创建sha1对象,然后直接加密就行,这里也支持 SHA224,SHA256等加密方式:
import hashlib
def hash(string):
'''哈希加密'''
h1 = hashlib.sha1() # 创建hash对象
# 声明encode
h1.update(string.encode(encoding = 'utf-8'))
return h1.hexdigest()
if __name__ == "__main__":
string = "MD5加密"
print('MD5加密前为:' + string)
print('MD5加密后为:' + hash(string))
运行结果:
hash加密前为:MD5加密
hash加密后为:983bb73e82bd715e65584ea6580bad4ec321c0f4
DES加密
这是一个分组加密算法,解密和加密是同一个算法,下面我简单介绍一下这种方式,主要用到pycryptodome这个模块,输入安装命令pip install pycryptodomex,测试代码如下,需要单独定义一个密钥:
from Cryptodome.Cipher import DES
import binascii
# 设置一个密钥
key = b'abcdefgh'
# 需要去生成一个DES对象
des = DES.new(key,DES.MODE_ECB)
# 需要加密的数据
text = "This is a key!"
text = text + (8 - (len(text) % 8)) * '='
print("text:%s" % text)
# DES加密过程
encrypt_text = des.encrypt(text.encode())
encrypt_text = binascii.b2a_hex(encrypt_text)
print("DES加密后:" + encrypt_text.decode())
# DES解密过程
decrypt_text = binascii.a2b_hex(encrypt_text)
decrypt_text = des.decrypt(decrypt_text)
print("DES解密后:" + decrypt_text.decode())
运行结果:
text:This is a key!==
DES加密后:a5ee554e36736a5d9b6db2cd9442ff38
DES解密后:This is a key!==
AES加密
这也是一种广泛使用的加密方法,是对DES的改进和替代,下面我简单介绍一下这种方式,也用到pycryptodome这个模块,测试代码如下,稍微有些复杂
from Cryptodome.Cipher import AES
from Cryptodome import Random
from binascii import b2a_hex
# 密钥
key = b'This is a 16 key'
# 要加密的明文
data = "AES加密"
# 生成长度等于AES块大小的不可重复的密钥向量
iv = Random.new().read(AES.block_size)
# 使用key和iv初始化AES对象,使用MODE_CFB模式
mycipher = AES.new(key,AES.MODE_CFB,iv)
# 加密的明文长度必须为16的倍数
# 将iv(密钥向量)加到加密的密文开头,一起传输
ciphertext = iv + mycipher.encrypt(data.encode())
# 解密的话要使用key和iv生成新的AES对象
mydecrypt = AES.new(key,AES.MODE_CFB,ciphertext[:16])
# 使用新生成的AES对象,将加密的密文解密
decrypttext = mydecrypt.decrypt(ciphertext[16:])
print("ASD加密后:",b2a_hex(ciphertext)[16:])
print("ASD解密后:",decrypttext.decode())
运行结果:
ASD加密后: b'18541e53ebfe5eef40d3d4631dc3c313d4'
ASD解密后: AES加密
RAS加密
这是一种非对称加密算法,在公开密钥加密和电子商业中经常会用到,下面我简单介绍一下这种方式,主要用到rsa这个模块,安装命令pip install rsa,测试代码如下,需要单独定义一个公钥和私钥
import rsa
key = rsa.newkeys(3000) # 生成随机密钥
privateKey = key[1] # 私钥
publicKey = key[0] # 公钥
message = "RSA加密" # 要加密的明文
message = message.encode()
# RSA加密过程
cryptedMessage = rsa.encrypt(message,publicKey)
print("RSA加密后:",cryptedMessage)
# RSA解密过程
message = rsa.decrypt(cryptedMessage,privateKey)
message = message.decode()
print("RSA解密后:",message)
运行结果:
RSA加密后: b"\x04\xf2\xaf\xbb\xe1\xffW\xd5\xabT`.\xd8\x02\xa7\x85\xdawF\x15Q\x88\xd9\xaf\x9b\xb7@gb\x8a\x81\xce\x8c2GCV;\r\x8a\x91NF\xd8\xb5\x99\x0b\xc5\xf9\xba\x94\xd4l\x8b\xa9a\xd5\x80\x98\xdeb\xcb\xf9N\x8c'Y\x9cX\xca\xf5$\x07A\x1a@\xb6-\xc7\xb22iNu0\xf6\x800\x9d\tB\x93\xe2\xa5P\xe7'+1*\x8aLV\xcac\xd6\x81\xfb\x0b\xee\xe9\x8b\xc4K\\\x0c/\x80\x184T\x80x\x87\xdc\xb3=\x12\x97\x8c\xa6\xecXF\x92\x87m$\x8e\x1c\xe7\x93;1\x9a;n`\xd8\xdb|\xbfW\x04\xfc\xbb\xec&\x8b\x91%\xd6\x12Qe\xa9\x84\xd1\x0c\xac\xd7\xabG\x945W7\x12\xae\xf3#\xd4\xf9\xaed^C\xae'w\x8aM\x01\r\xf9\x80\x1e\tl4\x1c)\\\x98\x01]e+[c\xf34\x99{7\xa5.\xefS\xd6\x99\xfa\x9f\x7f\xe0\x9b\xa2\xf9<p0%\xa1iG\x02\xf9\x0co\xde\xda\xab\x96`y\xb8\xb0\xe8\xd0 \xa9\xa1\x97@\xe7\x06\xa8\xac\x19-[W\xef\x0fR\xb7\\H\x0b\x15^\x0e@\x86g\xb8\xc8U=\xe7\xff\x06\n\x93<P\xc3\xa4\xa5\r\x8e5\xef+D\x9cM?\x1b\x11T\x8f\xa2\xb9\xa4,\x03n\x1e\xd0\xbc\x1ft\xab\x879\x11\xe9\x01\xffJ\xf9\x87\xb4/j\xf1O\x14\x19\xac\x8a\xb8C\xe5~o\xa9]\xca,\xe4\xe6\x18r\xd9\x8f]\xa1\xf8G\xed\x8c\xb6F\x9f\xabu\x12\xc3\x93\xf2] XO\xb0*\xadH0g\x88\x0c\xb9"
RSA解密后: RSA加密
python的加密方式的更多相关文章
- python前后端加密方式
后端加密方法: python后端加密方式: # 双重工加密 #bytes((7788).encode('utf-8')):为后端加密二把手,多加的锁,该参数可为空,必须加bytes才能实现 md5pa ...
- python爬虫之常见的加密方式
前言 数据加密与解密通常是为了保证数据在传输过程中的安全性,自古以来就一直存在,古代主要应用在战争领域,战争中会有很多情报信息要传递,这些重要的信息都会经过加密,在发送到对应的人手上. 现代 ,在网络 ...
- 潭州课堂25班:Ph201805201 爬虫基础 第七课 Python与常见加密方式 (课堂笔记)
打开图形界面 18版 Python与常见加密方式 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时 ...
- python常见的加密方式
1.前言 我们所说的加密方式都是对二进制编码的格式进行加密,对应到python中,则是我妈们的bytes. 所以当我们在Python中进行加密操作的时候,要确保我们的操作是bytes,否则就会报错. ...
- Python与常见加密方式
前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错. 将 ...
- python实现加密的方式总结
python实现加密的方式总结 原文地址 目录 基础知识扫盲 Base64 MD5 DES 3DES AES RSA 基础知识扫盲 对称加密 对称密钥加密 , 又叫私钥加密.即信息发送的方和接受方用一 ...
- 在python实现加密的方式总结
基础知识扫盲 对称加密 对称密钥加密 , 又叫私钥加密.即信息发送的方和接受方用一个密钥去加密和揭秘数据. 最大的优势是 加解密速度快,适合对大量数据进行加密, 对称加密的缺点是密钥的管理和分配, 换 ...
- 大华摄像头报警接口中图片加密,python调用c++方式实现解密
项目中,大华摄像头的报警信息,里面有图片地址,需要1天内取下来,保持留痕 可惜,图片下载后,加密了,大华提供了android,ios,c++例子,没有提供java解密例子 没办法,只好先用c++例子简 ...
- Dr.com──加密方式(网页端)
Dr.com是城市热点公司开发的宽带计费系统,可以控制网络进行管理,认证,计费,限速……许多的高校与企业都有使用. 从接触到drcom就很感兴趣(原因想必大家都懂...) drcom登陆(认证)方式又 ...
随机推荐
- 注意机制CBAM
这是一种用于前馈卷积神经网络的简单而有效的注意模块. 给定一个中间特征图,我们的模块会沿着两个独立的维度(通道和空间)依次推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征修饰. 由于CBAM ...
- js 执行总结1
一. function sayHi() { let x; let y; try { throw new Error(); } catch (x) { // 局部 x = 1; console.log( ...
- [spring]基于注解的spring配置
Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调 ...
- Spring mvc中@RequestMapping 基本用法
@RequestMapping(value="/departments") public String simplePattern(){ System.out.println(&q ...
- vuex 使用
一.什么是Vuex Vuex是一个专门为Vue.js应用程序开发的状态管理模式, 它采用集中式存储管理所有组件的公共状态, 并以相应的规则保证状态以一种可预测的方式发生变化 二. 为什么要使用Vuex ...
- pycharm设置背景颜色
https://jingyan.baidu.com/article/9faa7231f88570473c28cb88.html
- staticmethod自己定制
class StaticMethod: def __init__(self,func): self.func=func def __get__(self, instance, owner): #类来调 ...
- Kali Linux 2019.2安装谷歌输入法
前言 Linux下常用的中文输入法平台有IBus.fcitx和scim.scim现在维护滞后,不推荐使用. IBus ("Intelligent Input Bus") 是一个 输 ...
- DIN
1. DIN(Deep Interest Network)优点 使用用户兴趣分布来表示用户多种多样的兴趣爱好. 使用Attention机制来实现Local Activation,局部激活相关的历史兴趣 ...
- POP与OOP编程模式对比
面向过程:(procedure oriented programming 即:POP) 代表:C/C++ 向过程程序设计,它是以功能为中心来进行思考和组织的一种编程方式,强调的是系统的数据被加工和处理 ...