python利用rsa庫(kù)做公鑰解密的方法教程
前言
對(duì)于RSA的解密,即密文的數(shù)字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再對(duì)結(jié)果除以 N 求余數(shù)即可得到明文。D 和 N 的組合就是私鑰(private key)。
算法的加密和解密還是很簡(jiǎn)單的,可是公鑰和私鑰的生成算法卻不是隨意的。使用RSA公鑰解密,用openssl命令就是openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_text,但其python網(wǎng)上還真沒(méi)有找到有博文去寫(xiě),只有hash的rsa解簽名。
這里使用rsa庫(kù),如果沒(méi)有可以到官方網(wǎng)址https://pypi.python.org/pypi/rsa/3.1.4下載。
具體的安裝方法大家可以參考這里:http://www.dhdzp.com/article/70331.htm
想了想原理,然后到rsa庫(kù)的python代碼里找了找,從verify的代碼里提取了出來(lái),又試驗(yàn)了試驗(yàn),一切OK了。
代碼如下:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
#rsa
from rsa import PublicKey, common, transform, core
def f(cipher, PUBLIC_KEY):
public_key = PublicKey.load_pkcs1(PUBLIC_KEY)
encrypted = transform.bytes2int(cipher)
decrypted = core.decrypt_int(encrypted, public_key.e, public_key.n)
text = transform.int2bytes(decrypted)
if len(text) > 0 and text[0] == '\x01':
pos = text.find('\x00')
if pos > 0:
return text[pos+1:]
else:
return None
fn = sys.stdin.readline()[:-1]
public_key = sys.stdin.readline()[:-1]
x = f(open(fn).read(), open(public_key).read())
print x
用shell驗(yàn)證如下:
$ openssl genrsa -out pri2048.pem 2048
Generating RSA private key, 2048 bit long modulus
..+++
..............................................+++
e is 65537 (0x10001)
$ openssl rsa -in pri2048.pem -out pub2048.pem -RSAPublicKey_out
writing RSA key
$ echo -n 'Just a test' >1.txt
$ openssl rsautl -sign -in 1.txt -inkey pri2048.pem -out 1.bin
$ { echo 1.bin; echo pub2048.pem; } | ./test_rsa.py
Just a test
一切OK,注意,公鑰pem從私鑰里析出必須用-RSAPublicKey_out,這樣pem文件的第一行和最后一行為以下,這樣rsa.PublicKey.load_pkcs1才會(huì)認(rèn)識(shí)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- python rsa實(shí)現(xiàn)數(shù)據(jù)加密和解密、簽名加密和驗(yàn)簽功能
- Python生成rsa密鑰對(duì)操作示例
- Python3非對(duì)稱加密算法RSA實(shí)例詳解
- Python 25行代碼實(shí)現(xiàn)的RSA算法詳解
- python實(shí)現(xiàn)rsa加密實(shí)例詳解
- Python下實(shí)現(xiàn)的RSA加密/解密及簽名/驗(yàn)證功能示例
- python rsa 加密解密
- Python使用Pycrypto庫(kù)進(jìn)行RSA加密的方法詳解
- python使用rsa非對(duì)稱加密過(guò)程解析
相關(guān)文章
Python+SeaTable實(shí)現(xiàn)生成條形碼圖片并寫(xiě)入表格
不管是錄入信息時(shí)需要用掃碼器掃碼錄入,還是有別的生成條形碼的需要,這在?SeaTable?表格中用?Python?腳本就可以輕松實(shí)現(xiàn),本文就來(lái)為大家詳細(xì)講解一下2022-07-07
Python基礎(chǔ)教程之pytest參數(shù)化詳解
參數(shù)化就是把測(cè)試過(guò)程中的數(shù)據(jù)提取出來(lái),通過(guò)參數(shù)傳遞不同的數(shù)據(jù)來(lái)驅(qū)動(dòng)用例運(yùn)行,這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之pytest參數(shù)化的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
Python語(yǔ)言規(guī)范之Pylint的詳細(xì)用法
Pylint 是一個(gè) Python 代碼分析工具,它分析 Python 代碼中的錯(cuò)誤,查找不符合代碼風(fēng)格標(biāo)準(zhǔn)(Pylint 默認(rèn)使用的代碼風(fēng)格是 PEP 8)和有潛在問(wèn)題的代碼,接下來(lái)通過(guò)本文給大家介紹Python Pylint的使用,感興趣的朋友一起看看吧2021-06-06
python在windows調(diào)用svn-pysvn的實(shí)現(xiàn)
本文主要介紹了python在windows調(diào)用svn-pysvn的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
AI:如何訓(xùn)練機(jī)器學(xué)習(xí)的模型
這篇文章主要介紹了是如何進(jìn)行機(jī)器學(xué)習(xí)的模型的訓(xùn)練,全文邏輯清晰,簡(jiǎn)單易懂,如果您正在學(xué)習(xí)機(jī)器學(xué)習(xí)那么可以參考下,說(shuō)不定會(huì)有不一樣的收貨2021-04-04

