Python实现RSA(jsencrypt)加密的两种方式

注: 原创作者 https://zhuanlan.zhihu.com/p/158083974
加了一点自己使用时候的小坑,目的是方便以后自己回溯查看

一、使用Python的相关库进行加密

此方法是借用Python Crypto库里的RSA算法进行加密。

import base64
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pksc1_v1_5
from Crypto.PublicKey import RSA

def encrpt(password, public_key):
    rsakey = RSA.importKey(public_key)
    cipher = Cipher_pksc1_v1_5.new(rsakey)
    cipher_text = base64.b64encode(cipher.encrypt(password.encode()))
    return cipher_text.decode()

# key是公钥,需要修改成自己的之后再进行加密
key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCC//WCWUQiDiIh8GhQfEwfU9OM7khBwlXE1HGEoBNakQJcr7iUPBUPADoik8d55z4KWCMgeImV+GHjGY/h8Vpy4nZ2AqmNlbz7MAtq9ln4p4EtgAvTqA8RFxV7SORd/GYio+mPh80T+zQJJwKpkxT1uewbU9LrSbqbkEtYpg9u2QIDAQAB'
public_key = '-----BEGIN PUBLIC KEY-----\n' + key + '\n-----END PUBLIC KEY-----'
password = encrpt('my_passwd', public_key)
print('password:', password)

注意: 这里的public_key一定不要动,这个格式很重要

二、通过让Python运行rsa.js文件进行加密

此方法是通过让Python运行rsa.js文件里的加密函数进行加密,相比第一种方法更纯粹一些。
首需要下载rsa.js文件,下载地址为:

https://gitee.com/youchuanming/rsa_jsencrypt

其次把下载好的rsa.js文件里的公钥参数,修改成自己的公钥参数,并进行保存。
在这里插入图片描述
最后运行下方代码进行加密。

import execjs

js_file = './rsa.js'  # <-- rsa.js文件地址
with open(js_file, 'r', encoding='utf-8') as f:
    js_code = f.read()

js = execjs.compile(js_code)
password = js.call('getRsaResult', 'my_passwd')
print('password:', password)

在这里插入图片描述
如果用node.js单独执行
在这里插入图片描述
会报错
ASN1是一个JS解码器,可以解码任何有效的Base64编码或十六进制编码的DER或BER结构,一般浏览器已内置的有,大部分js调试器是没有的
解决方法:如上面用python库execjs执行或者直接复制浏览器执行,或者其他js调试工具

在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RSA 是一种非对称加密算法,可以用于加密和解密数据。以下是 Python 中使用 RSA 加密算法的示例代码: 首先,需要安装 `pycryptodome` 库来生成 RSA 密钥对和进行加密解密操作。可以使用以下命令安装: ``` pip install pycryptodome ``` 接下来,我们可以使用以下代码生成 RSA 密钥对: ```python from Crypto.PublicKey import RSA # 生成 2048 位的 RSA 密钥对 key = RSA.generate(2048) # 获取私钥和公钥 private_key = key.export_key() public_key = key.publickey().export_key() # 将私钥和公钥保存到文件中 with open('private.pem', 'wb') as f: f.write(private_key) with open('public.pem', 'wb') as f: f.write(public_key) ``` 上述代码将生成一个 2048 位的 RSA 密钥对,并将私钥和公钥保存到 `private.pem` 和 `public.pem` 文件中。 接下来,我们可以使用以下代码来进行加密和解密操作: ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP # 加载公钥和私钥 with open('public.pem', 'rb') as f: public_key = RSA.import_key(f.read()) with open('private.pem', 'rb') as f: private_key = RSA.import_key(f.read()) # 加密数据 cipher = PKCS1_OAEP.new(public_key) encrypted_data = cipher.encrypt(b'Hello, world!') # 解密数据 cipher = PKCS1_OAEP.new(private_key) decrypted_data = cipher.decrypt(encrypted_data) print(decrypted_data.decode()) ``` 上述代码将加载保存在 `public.pem` 和 `private.pem` 文件中的公钥和私钥,并使用公钥加密一条消息,然后使用私钥解密该消息。 需要注意的是,RSA 加密算法有一个最大加密数据的长度限制。因此,如果要加密的数据长度超过了限制,可以考虑使用对称加密算法来对数据进行加密,然后再使用 RSA 加密对称加密算法的密钥。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值