#coding:utf-8
from Crypto import Random
from Crypto.PublicKey import RSA
RSA_LENGTH = 2048
ENCRY_MAX_LENGTH = RSA_LENGTH/8 -11
DECRY_LENGTH = RSA_LENGTH/8
# 生成秘钥对实例对象:1024是秘钥的长度
rsa = RSA.generate(RSA_LENGTH)
# 获取公钥,保存到文件
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)
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
def encry(msg):
"""
公钥加密
:param msg: 要加密内容
:return: 加密之后的密文
"""
# 获取公钥
key = open('public.pem').read()
publickey = RSA.importKey(key)
# 分段加密
pk = PKCS1_v1_5.new(publickey)
encrypt_text = []
msg = base64.b64encode(msg)
for i in range(0,len(msg),ENCRY_MAX_LENGTH):
cont = msg[i:i+ENCRY_MAX_LENGTH]
encrypt_text.append(pk.encrypt(cont))
# 加密完进行拼接
cipher_text = ''.join(encrypt_text)
# base64进行编码
result = base64.b64encode(cipher_text)
return result.decode()
def decrypt(msg):
"""
私钥进行解密
:param msg: 密文:字符串类型
:return: 解密之后的内容
"""
# base64解码
msg = base64.b64decode(msg)
# 获取私钥
privatekey = open('private.pem').read()
rsakey = RSA.importKey(privatekey)
cipher = PKCS1_v1_5.new(rsakey)
# 进行解密
text = []
for i in range(0,len(msg),DECRY_LENGTH):
cont = msg[i:i+DECRY_LENGTH]
text.append(cipher.decrypt(cont,1))
text = ''.join(text)
return base64.b64decode(text)
msg = "你好"*199
enc = encry(msg)
print enc
dec = decrypt(enc)
print dec
RSA分段加密
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、首先需要公钥、私钥, 以及传递给 java后端的私钥,我们在这里使用openSSL在终端生成所需要的公私钥, ...
- 为什么要分段加密 加密的字段长短规则如下: 加密的 plaintext 最大长度是 证书key位数/8 - 11,...