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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python post请求rsa加密_Python的加密方式:RSA加密

發布時間:2024/1/23 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python post请求rsa加密_Python的加密方式:RSA加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python的加密方式:RSA加密

RSA加密是一種非對稱加密,通常使用公鑰加密,私鑰解密,私鑰簽名,公鑰驗簽。

在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的.RSA算法通常是先生成一對RSA密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網絡服務器中注冊。

RSA是一種公鑰密碼算法,加密算法是將明文m(m

以下是關于RSA生成公鑰私鑰、加密、解密、加簽、驗簽的示例。

1、生成公鑰私鑰:

from Crypto import Random

from Crypto.PublicKey import RSA

# 偽隨機數生成器

random_generator = Random.new().read

# rsa算法生成實例

rsa = RSA.generate(1024, random_generator)

# 私鑰的生成

private_pem = rsa.exportKey()

with open("private.pem", "wb") as f:

f.write(private_pem)

# 公鑰的生成

public_pem = rsa.publickey().exportKey()

with open("public.pem", "wb") as f:

f.write(public_pem)

生成的公鑰私鑰文件在項目路徑下,也可以直接指定生成文件路徑。

文件樣例:

生成的公鑰私鑰格式是固定的,秘鑰中間無空格無換行,秘鑰末尾也空格無換行,如下:

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEedv+5NsbqAh6pjOMKF8I7FGa

et3QMUi0g5xDfQAM219qqXnoPi2hmCMjR8MWJV/zyMZ6IiRG/pvrZ2ZhfDNFdW3Z

SfHczRUvabABzWAr/57/eDBjswv4RQA+gUS6t8wFY/iV+O3i9+d79iN3VhUogfI3

3Ru3+RPFeFW88tYUhwIDAQAB

-----END PUBLIC KEY-----

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQDEedv+5NsbqAh6pjOMKF8I7FGaet3QMUi0g5xDfQAM219qqXno

Pi2hmCMjR8MWJV/zyMZ6IiRG/pvrZ2ZhfDNFdW3ZSfHczRUvabABzWAr/57/eDBj

swv4RQA+gUS6t8wFY/iV+O3i9+d79iN3VhUogfI33Ru3+RPFeFW88tYUhwIDAQAB

AoGAApzaO5QAg+gioLroEZOR2/UEisjafUPCg0ACynT1lLYwGSOCzv9QrQbwZK42

HmvF0GCZnxMoJ1eIbEN2PZKgveQ/o4o8OdhuSk8pcDY72QwQHgSh1yfdvqkulo7D

vdmjz63DVSrknYRQFYSHIwUPVVTWyT80OTCYSn3JGqNKa9kCQQDZUbtlBvcPzP4T

5hRaH9XvCh3PPusQKGPzVRVLn+qZ30N2PNgttYKRMshlz1WMts2ZAKr3b3BLT6GT

shE5KatfAkEA53JkuV1vUEMg5j1ClgrwTs65yLWb+NbLH84xekrkkSxCkVjE7J/N

QV7Uk87na49LuztBaECBmaZyTQnFKk7P2QJAMzcc18lVbmbcNipR/49jJquWrOHi

GfO64nzZwPHWIx9H0dSzCcquE7QJIF1Fhx0JxRYwNJIRv93rcVhU0MjuNwJAIgI/

JrXCC4sxpGNQC3gkA5CA4Cs/dfsp8cx8nLmwiFx2k6D1nseEg5yJpAZ9HuL5f9Of

MtB3uroohYVwAV1/UQJBAIZQkryoOJxPbfWvIIGBOAlS/QqfE5kLV+3L2RUtBlac

nJykMucrdDx1gVKgoREUElxpYtlWI17h9MeNXRICgIM=

-----END RSA PRIVATE KEY-----

2、加密(使用公鑰加密)

from Crypto.PublicKey import RSA

from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5

import base64

# 加密

message = "Hello,This is RSA加密"

rsakey = RSA.importKey(open("public.pem").read())

cipher = Cipher_pkcs1_v1_5.new(rsakey) #創建用于執行pkcs1_v1_5加密或解密的密碼

cipher_text = base64.b64encode(cipher.encrypt(message.encode('utf-8')))

print(cipher_text.decode('utf-8'))

加密結果:

Y1oivzbBDIEWX+NaXYLCJo5A226TmuemketZMUM3U80Rw3gSETjG5rHQ+S++Yao+iGQ5jSJA2yjkDtDAjdvi2VUz15LRSkdeKoliWnWy93KKl+aNEsBl3SUicATUgfNWU5ILo+DiltpF79AfIEhPptAz7+gN11KAf5LjfcQZ2+0=

這里每次使用公鑰加密后的結果都不一致,跟對數據的padding即填充有關。

加密時支持的最大字節數與證書有一定關系。加密時支持的最大字節數:證書位數/8 -11(比如:2048位的證書,支持的最大加密字節數:2048/8 - 11 = 245)

1024位的證書,加密時最大支持117個字節,解密時為128;

2048位的證書,加密時最大支持245個字節,解密時為256。

如果需要加密的字節數超出證書能加密的最大字節數,此時就需要進行分段加密。

3、解密(使用私鑰解密)

from Crypto.PublicKey import RSA

from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5

import base64

# 解密

cipher_text = "Y1oivzbBDIEWX+NaXYLCJo5A226TmuemketZMUM3U80Rw3gSETjG5rHQ+S++Yao+iGQ5jSJA2yjkDtDAjdvi2VUz15LRSkdeKoliWnWy93KKl+aNEsBl3SUicATUgfNWU5ILo+DiltpF79AfIEhPptAz7+gN11KAf5LjfcQZ2+0="

encrypt_text = cipher_text.encode('utf-8')

rsakey = RSA.importKey(open("private.pem").read())

cipher = Cipher_pkcs1_v1_5.new(rsakey) #創建用于執行pkcs1_v1_5加密或解密的密碼

text = cipher.decrypt(base64.b64decode(encrypt_text), "解密失敗")

print(text.decode('utf-8'))

解密結果,與加密前信息一致:

Hello,This is RSA加密

4、加簽(使用私鑰加簽)

使用私鑰加簽,每次簽名是一致的。

from Crypto.PublicKey import RSA

from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5

from Crypto.Hash import SHA

import base64

#加簽

message = "This is a request message..."

rsakey = RSA.importKey(open("private.pem").read())

signer = Signature_pkcs1_v1_5.new(rsakey)

digest = SHA.new()

digest.update(message.encode("utf-8"))

sign = signer.sign(digest)

signature = base64.b64encode(sign)

print(signature.decode('utf-8'))

簽名結果:

fd99fQpbH48VT9YQKepyHSip9pwrJkm1PN3ZykHNrfTVk555fv392E7MtbIfcligOCWUx8nd3g+7J0Fo3x+9G1Y6MJs0CuMCbA4qulUMNGjzUpsN1URorMZfPKjPvhf22ARH9qZEnebQ7UUGO3ioy4nylZONb3Ldhga+PKyxYTM=

5、驗簽(使用公鑰驗簽)

from Crypto.PublicKey import RSA

from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5

from Crypto.Hash import SHA

import base64

#驗簽

message_verify = "This is a request message..."

signature = "fd99fQpbH48VT9YQKepyHSip9pwrJkm1PN3ZykHNrfTVk555fv392E7MtbIfcligOCWUx8nd3g+7J0Fo3x+9G1Y6MJs0CuMCbA4qulUMNGjzUpsN1URorMZfPKjPvhf22ARH9qZEnebQ7UUGO3ioy4nylZONb3Ldhga+PKyxYTM="

rsakey = RSA.importKey(open("public.pem").read())

verifier = Signature_pkcs1_v1_5.new(rsakey)

hsmsg = SHA.new()

hsmsg.update(message_verify.encode("utf-8"))

is_verify = verifier.verify(hsmsg, base64.b64decode(signature))

print(is_verify)

驗簽結果:

True

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的python post请求rsa加密_Python的加密方式:RSA加密的全部內容,希望文章能夠幫你解決所遇到的問題。

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