Python使用rsa库进行公钥解密的操作指南

小岛来信
小岛来信
发布时间:2026-10-13| 3人浏览过
原创

本文详解如何在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 方法正确识别和加载。

总结

以上内容涵盖了本文的全部知识点,旨在为读者的学习或工作提供有价值的参考。若在阅读或实践中遇到疑问,欢迎留言交流,感谢对本站的支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。