Python使用rsa库进行公钥解密的操作指南
本文详解如何在Python中利用rsa库实现公钥解密。通过解析RSA原理,提取核心解密逻辑,并提供完整代码示例。结合OpenShell命令验证流程,指导用户正确生成公钥文件并执行解密操作,解决网上缺乏公钥解密教程的问题。
前言
RSA解密的核心在于计算密文的 D 次方对 N 取模,即通过密文与私钥指数 D 进行多次乘法运算后除以模数 N 求余,从而还原明文。其中,D 与 N 的组合构成了私钥(private key)。
尽管RSA的加解密数学原理相对直观,但公钥与私钥的生成算法具有严格的规范。在命令行工具中,使用OpenSSL进行公钥解密的标准命令为:openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_text。然而,在网络资源中,关于Python实现公钥解密的教程较为罕见,现有资料多集中于基于哈希的RSA签名验证。
本方案采用Python的rsa库,若环境中未安装该库,可前往官方PyPI地址 https://pypi.python.org/pypi/rsa/3.1.4 下载对应版本。
具体的库安装步骤可参考以下教程链接:https://www.jb51.net/article/70331.htm
在理解基本原理后,通过查阅rsa库的Python源码,从verify函数中提取关键解密逻辑,并经过实际测试验证,确认功能正常运行。
具体实现代码如下:
#! /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命令进行验证的流程如下:
$ 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
测试结果显示一切正常。需要注意的是,从私钥文件提取公钥PEM格式时,必须使用 -RSAPublicKey_out 参数。这确保了生成的PEM文件首尾格式符合规范,从而能被 rsa.PublicKey.load_pkcs1 方法正确识别和加载。
总结
以上内容涵盖了本文的全部知识点,旨在为读者的学习或工作提供有价值的参考。若在阅读或实践中遇到疑问,欢迎留言交流,感谢对本站的支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









