亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術(shù)文章
文章詳情頁

python RSA加密的示例

瀏覽:2日期:2022-07-02 16:18:26

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

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

RSA是一種公鑰密碼算法,加密算法是將明文m(m<n是一個整數(shù))加密成密文c,即明文數(shù)字m的 E 次方求mod N,也就是將明文與自己相乘E次,然后結(jié)果除以N求余數(shù),余數(shù)就是密文c,E和N組合就是公鑰;解密算法為將密文c解密為明文m,即密文數(shù)字c的D次方求mod N,也就是將密文與自己相乘D次,然后結(jié)果除以N求余數(shù),余數(shù)就是明文m,D和N組合就是私鑰。

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

1、生成公鑰私鑰:

from Crypto import Randomfrom Crypto.PublicKey import RSA # 偽隨機數(shù)生成器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)

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

文件樣例

python RSA加密的示例

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

-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEedv+5NsbqAh6pjOMKF8I7FGaet3QMUi0g5xDfQAM219qqXnoPi2hmCMjR8MWJV/zyMZ6IiRG/pvrZ2ZhfDNFdW3ZSfHczRUvabABzWAr/57/eDBjswv4RQA+gUS6t8wFY/iV+O3i9+d79iN3VhUogfI33Ru3+RPFeFW88tYUhwIDAQAB-----END PUBLIC KEY----- -----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQDEedv+5NsbqAh6pjOMKF8I7FGaet3QMUi0g5xDfQAM219qqXnoPi2hmCMjR8MWJV/zyMZ6IiRG/pvrZ2ZhfDNFdW3ZSfHczRUvabABzWAr/57/eDBjswv4RQA+gUS6t8wFY/iV+O3i9+d79iN3VhUogfI33Ru3+RPFeFW88tYUhwIDAQABAoGAApzaO5QAg+gioLroEZOR2/UEisjafUPCg0ACynT1lLYwGSOCzv9QrQbwZK42HmvF0GCZnxMoJ1eIbEN2PZKgveQ/o4o8OdhuSk8pcDY72QwQHgSh1yfdvqkulo7Dvdmjz63DVSrknYRQFYSHIwUPVVTWyT80OTCYSn3JGqNKa9kCQQDZUbtlBvcPzP4T5hRaH9XvCh3PPusQKGPzVRVLn+qZ30N2PNgttYKRMshlz1WMts2ZAKr3b3BLT6GTshE5KatfAkEA53JkuV1vUEMg5j1ClgrwTs65yLWb+NbLH84xekrkkSxCkVjE7J/NQV7Uk87na49LuztBaECBmaZyTQnFKk7P2QJAMzcc18lVbmbcNipR/49jJquWrOHiGfO64nzZwPHWIx9H0dSzCcquE7QJIF1Fhx0JxRYwNJIRv93rcVhU0MjuNwJAIgI/JrXCC4sxpGNQC3gkA5CA4Cs/dfsp8cx8nLmwiFx2k6D1nseEg5yJpAZ9HuL5f9OfMtB3uroohYVwAV1/UQJBAIZQkryoOJxPbfWvIIGBOAlS/QqfE5kLV+3L2RUtBlacnJykMucrdDx1gVKgoREUElxpYtlWI17h9MeNXRICgIM=-----END RSA PRIVATE KEY-----2、加密(使用公鑰加密)

from Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5import base64 # 加密message = 'Hello,This is RSA加密'rsakey = RSA.importKey(open('public.pem').read())cipher = Cipher_pkcs1_v1_5.new(rsakey) #創(chuàng)建用于執(zhí)行pkcs1_v1_5加密或解密的密碼cipher_text = base64.b64encode(cipher.encrypt(message.encode(’utf-8’)))print(cipher_text.decode(’utf-8’))

加密結(jié)果:

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

這里每次使用公鑰加密后的結(jié)果都不一致,跟對數(shù)據(jù)的padding即填充有關(guān)。

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

1024位的證書,加密時最大支持117個字節(jié),解密時為128;2048位的證書,加密時最大支持245個字節(jié),解密時為256。

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

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

from Crypto.PublicKey import RSAfrom Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5import 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) #創(chuàng)建用于執(zhí)行pkcs1_v1_5加密或解密的密碼text = cipher.decrypt(base64.b64decode(encrypt_text), '解密失敗')print(text.decode(’utf-8’))

解密結(jié)果,與加密前信息一致:

Hello,This is RSA加密4、加簽(使用私鑰加簽)

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

from Crypto.PublicKey import RSAfrom Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5from Crypto.Hash import SHAimport 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’))

簽名結(jié)果:

fd99fQpbH48VT9YQKepyHSip9pwrJkm1PN3ZykHNrfTVk555fv392E7MtbIfcligOCWUx8nd3g+7J0Fo3x+9G1Y6MJs0CuMCbA4qulUMNGjzUpsN1URorMZfPKjPvhf22ARH9qZEnebQ7UUGO3ioy4nylZONb3Ldhga+PKyxYTM=5、驗簽(使用公鑰驗簽)

from Crypto.PublicKey import RSAfrom Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5from Crypto.Hash import SHAimport 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)

驗簽結(jié)果:

True

以上就是python RSA加密的示例的詳細內(nèi)容,更多關(guān)于python rsa加密的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 欧美精品不卡 | 中国女警察一级毛片视频 | 成人精品一区二区久久久 | 欧美日本一区二区三区道 | 成人国产在线视频 | 日韩欧美在线视频 | 日本一区二区三区不卡在线视频 | 免费一级特黄3大片视频 | 久久久国产99久久国产一 | 欧美精品xxxⅹ欧美 欧美精品不卡 | 欧美性色xo影院在线观看 | 欧美日韩视频在线第一区二区三区 | 手机看片福利永久 | 亚洲99爱| 国产一级片免费看 | 国产精品久久久久网站 | 99久国产| 美女精品永久福利在线 | 黄色美女视频网站 | 韩国精品视频在线观看 | 天天狠操 | 九九免费视频 | 日本一区二区三区高清福利视频 | 亚洲国产最新 | 久久国产精品久久久久久久久久 | 国产成人精品男人的天堂网站 | 国产精品免费久久 | 999成人网 | 看真人一级毛片 | 99精品久久精品一区二区 | 欧美成人免费观看国产 | 97超视频在线观看 | 91一级片 | 一区二区三区四区在线 | 日韩激情无码免费毛片 | 欧美私人网站 | 欧美怡红院在线观看 | 三上悠亚免费一区二区在线 | 国产成人精品在视频 | 国产成人午夜精品5599 | 久久久久久一品道精品免费看 |