日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

常见加密解密 -- pycryptodomex库

發布時間:2024/4/24 综合教程 59 生活家
生活随笔 收集整理的這篇文章主要介紹了 常见加密解密 -- pycryptodomex库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

安裝

windows

pip install pycryptodomex

ubuntu

pip install pycryptodome

加密方式

單向加密:MD5

只能對數據進行加密,而不能解密

對稱加密:DES、AES

數據加密與解密使用相同的密鑰

非對稱加密:RSA

比對稱加密更安全、但速度慢千倍、通常用來做身份認證
什么是非對稱加密:https://www.bilibili.com/video/av65017912/

MD5 ?

https://www.cnblogs.com/jiyu-hlzy/p/11788091.html

DES

from Cryptodome.Cipher import DES
import binascii

# DES加密數據的長度須為8的的倍數,不夠可以用其它字符填充
text = 'Welcome to DES'
if len(text) % 8 != 0:
    text = text + "+" * (8 - len(text) % 8)
# 密鑰:必須為8字節
key = b'12345678'
# 使用 key 初始化 DES 對象,使用 DES.MODE_ECB 模式
des = DES.new(key, DES.MODE_ECB)
# 加密
result = des.encrypt(text.encode())

print('加密后的數據:', result)
# 轉為十六進制    binascii 的 b2a_hex 或者 hexlify 方法
print('轉為十六進制:', binascii.b2a_hex(result))
# 解密
print('解密后的數據:', des.decrypt(result))

AES

from Cryptodome.Cipher import AES
from Cryptodome import Random
import binascii

text = 'Welcome to AES'
# 密鑰key 長度必須為16(AES-128)、24(AES-192)或 32(AES-256)的Bytes長度
key = b'1234567890ABCDEF'
# 生成長度等于AES塊大小的不可重復的密鑰向量
iv = Random.new().read(AES.block_size)
# 使用 key 和 iv 初始化AES對象,使用 AES.MODE_CFB 模式
aes = AES.new(key, AES.MODE_CFB, iv)
# 加密
result = aes.encrypt(text.encode())
# 解密
# 不能在encrypt()之后調用decrypt()
# 需要用相同的key和iv初始化新的AES對象
decrypt_aes = AES.new(key, AES.MODE_CFB, iv)

print('密鑰:', key)
print('iv:', iv)
print('十六進制的iv:', binascii.b2a_hex(iv))
print('加密后的數據:', result)
print('轉為十六進制:', binascii.b2a_hex(result))
print('解密后的數據:', decrypt_aes.decrypt(result))

RSA

公鑰加密、私鑰解密

import rsa

text = 'Welcome to RSA'
# 生成密鑰對
pubkey, prikey = rsa.newkeys(1024)
# 加密:使用公鑰
result = rsa.encrypt(text.encode(), pubkey)
print('加密后的數據:',result)
# 解密:使用私鑰
print('解密后的數據:',rsa.decrypt(result, prikey))

創建公鑰

import rsa

text = 'Welcome to RSA'

# 公鑰有兩個值  n,e
public_n = "e0b509f62a8fc9" * 4
public_e = '010001'

# n、e必須為整數
# 將16進制的字符串轉為整數
rsa_n = int(public_n, 16)
rsa_e = int(public_e, 16)
print('n:{}
e:{}'.format(rsa_n, rsa_e))

# 創建公鑰 rsa.PublicKey(n,e)
pubkey = rsa.PublicKey(rsa_n, rsa_e)
print('公鑰類型:', type(pubkey))
print('公鑰:', pubkey)
print('n:{}
e:{}'.format(pubkey.n, pubkey.e))
print('加密后的數據:', rsa.encrypt(text.encode(), pubkey))

加簽、驗簽

import rsa

pubkey, prikey = rsa.newkeys(1024)
# 加簽    rsa.sign(原信息,私鑰,加密方式)  生成加簽過后的信息
signMessage = rsa.sign('投資房地產'.encode(), prikey, 'MD5')
print(signMessage)
# 驗簽    rsa.verify(需要驗證的信息,加簽過后的信息,公鑰)
# 如果需要驗證的信息,是原信息,返回加密方式
veri_1 = rsa.verify('投資房地產'.encode(),signMessage, pubkey)
print('投資房地產:',veri_1)
# 如果需要驗證的信息,不是原信息(表示信息被篡改過),則驗證失敗報錯:Verification failed
veri_2 = rsa.verify('投資互聯網'.encode(),signMessage, pubkey)
print('投資互聯網,',veri_2)

總結

以上是生活随笔為你收集整理的常见加密解密 -- pycryptodomex库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。