rsa加密过程和解密过程 python公钥解密原理?

python公钥解密原理?你好,你这个非对称加密算法,用公钥加密,然后用私钥解密。目前多采用Rsa和椭圆加密算法。目前Rsa算法多用于爬虫。下面是python的rsa加密代码,可以参考一下。从将PKC

python公钥解密原理?

你好,你这个非对称加密算法,用公钥加密,然后用私钥解密。目前多采用Rsa和椭圆加密算法。目前Rsa算法多用于爬虫。下面是python的rsa加密代码,可以参考一下。

从将PKCS1_v1_5作为密码_pkcs1_v1_5导入

#rsa加密,加密结果通常是base64编码。

def encrypt(公钥,m:

Cipher Cipher _ pkcs1 _ v1 _(public _ key)

cipher _ text base64 . b 64 encode(cipher . encrypt(m

Python如何玩转加密?

1、生成公钥和私钥对

使用openssl工具生成RSA公钥和私钥对。

1.下载openssl工具。下载地址

2.打开openssl文件夹下的bin文件夹,执行openssl.exe文件;

3.生成RSA私钥命令:

这里生成的密钥文件是2048位。

genrsa -out rsa_private_ 2048

4.生成RSA公钥命令:

注意,公钥和私钥是成对的,所以你生成一个后,另一个是基于前一个的文件名生成的,否则就不是一对!!

RSA-in RSA _ private _-pub out-out RSA _ public _

生成的文件应该在您的用户目录中,或者在openssl的bin文件夹中(有时它 在这里,有时它 它不在那里,这真令人困惑。反正两个地方都找就行了,肯定是有的)。

5.让 让我们在这里介绍RSA密钥文件的规则。文件名都是。pem为后缀,生成的RSA密钥可以看做全部。

以-begin RSA private key-开始并以-end RSA private key-结束的字符串,没有换行符,这是原始的RSA私钥。

第二,安装—pycryptodome,python支持的加密库。

我用的是Python版,网上搜了一下。在python3.6之前,大部分版本都是用pycrypto加密的,但是在python3.6之后,因为没有人维护pycrypto,所以改名为pycryptodome。这个库的强大之处在于,它是pycrypto库的扩展,使用起来更加方便。,更灵活~ ~功能杆掉落

安装pycryptodome

如果你安装pip,它 这很简单。

pip3安装pycryptodom:

无键

try:

钥匙(打开(fn)。r:除外

打印(导入rsa密钥文件时出错,fn,:

r:

r:除外

Print(将字符串密钥转换为rsa格式密钥时出错,skey,err)

返回ret

加密

从进口PKCS1_OA:

密文b

try:

密码PKCS1_(rsa_key)

密文cipher.encrypt(数据)

:除外

打印(RSA加密失败,,错误)

返回密文

因为RSA在加密过程中只能加密最大长度的字符串,所以如果你加密的数据太长,你需要在加密过程中分段加密。同样,解密也是分段解密。

1024位证书加密时最多支持117字节,解密时最多支持128字节;

2048位证书在加密时最多支持245字节,在解密时最多支持256字节。

加密时支持的最大字节数:证书位数/8 -11(例如:2048位证书,支持的最大加密字节数:2048/8-11-245)。

其中,11个字节为保留字节。

我上面的密钥文件是2048位,所以加密块长度是245字节。

4.加密块

#根据密钥长度计算块大小

d:

try:

# RSA只支持有限长度内的数据加密解密,需要分区。

#块大小block_r:

引发Runtim:

r:除外

Print(计算加密和解密数据块大小时出错,rsa_k:

bs获取块大小(rsa密钥)

对于i in rang:

收益率数据[i:i bs]

无论加密中使用的段的大小如何,RSA都会对段进行解密,并根据/8的密钥长度对其进行解密。

从进口PKCS1_OA:

r:

密码PKCS1_(rsa_k:除外

打印(RSA解密失败,,错误)

返回ret_data

符号

从导入pkcs1_15

来自Crypto。哈希导入SHA256

# RSA签名

d:

签名

try:

h(数据)

签名pkcs1_(rsa_key)。符号(h)

除了Exc:

打印(RSA签名失败,,错误)

返回签名

检查签名

# RSA签名验证

定义rsa_sign_v:

try:

h(数据)

pkcs1_(rsa_k:

ret False

返回ret

加密解密类(我把RSA加密解密封装成一个类,方便后续直接调用),完整代码如下:

#-*-coding: utf-8-*-

作为密码导入

作为符号导入

导入加密。哈希作为哈希

从导入RSA

从导入PKCS1_v1_5作为PKCS1_v1_5_cipper

从导入PKCS1_v1_5作为PKCS1_v1_5_sign

来自Crypto。哈希导入SHA1

Rsa:级

RSA加密和解密签名类

def __int__(self,ciper_libPKCS1_v1_5_cipper,sign_libPKCS1_v1_5_sign,hash_libSHA1,

pub_fil:

#加密和解密库

_lib cip:

_k:

_k:

_k:

_键pri_k:

_k:

_key(打开(pri_file)。read())

#块保留长度

_reversed_size reversed_size

#根据密钥长度计算块大小

def get_block_siz:

try:

# RSA只支持有限长度内的数据加密解密,需要分区。

#块大小

保留大小反转大小

密钥大小rsa__in_bits()

if (k:

引发Runtim:

r:除外

Print(计算加密和解密数据块大小时出错,rsa_k:

bs _块_大小(rsa_k:

产量数据[i:i bs]

#加密

定义编码字节(自身,数据,k:

文本b

try:

rsa_k:

rsa_k:

cur_t:

文本b

try:

rsa_k:

rsa_k:

如果键入(_ lib)_OA:

当前文本(日期)

:

Cur_t:除外

打印(RSA解密失败,数据,错误)

返回文本

# RSA签名

定义符号_字节(自身,数据,k:

签名

try:

rsa_k:

rsa_k:除外

打印(RSA签名失败,,错误)

返回签名

# RSA签名验证

定义签名_验证(自我,数据,签名,k:

try:

rsa_k:

rsa_k:

r:

及格

如果__姓名_ _ __main__:

主()