吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5369|回复: 6
收起左侧

[Python 转载] python 3 实现js中JSEncrypt encrypt方法,rsa模块根据字符串公钥生成加密字符串

[复制链接]
窗雨树雪 发表于 2018-12-13 15:06
# coding=utf-8
import base64
import rsa

__all__ = ['rsa_encrypt']

def _str2key(s):
    # 对字符串解码
    b_str = base64.b64decode(s)

    if len(b_str) < 162:
        return False

    hex_str = ''

    # 按位转换成16进制
    for x in b_str:
        h = hex(x)[2:]
        h = h.rjust(2, '0')
        hex_str += h

    # 找到模数和指数的开头结束位置
    m_start = 29 * 2
    e_start = 159 * 2
    m_len = 128 * 2
    e_len = 3 * 2

    modulus = hex_str[m_start:m_start + m_len]
    exponent = hex_str[e_start:e_start + e_len]

    return modulus, exponent

def rsa_encrypt(s, pubkey_str):
    '''
    rsa加密
    :param s:
    :param pubkey_str:公钥
    :return:
    '''
    key = _str2key(pubkey_str)
    modulus = int(key[0], 16)
    exponent = int(key[1], 16)
    pubkey = rsa.PublicKey(modulus, exponent)
    return base64.b64encode(rsa.encrypt(s.encode(), pubkey)).decode()

使用时直接调用rsa_encrypt(s, pubkey_str)方法就好了,第一个参数为待加密字符串,第二个参数为公钥,返回值为加密后的字符串

其中_str2key(s)方法是在https://www.cnblogs.com/masako/p/7660418.html这篇文章的基础上做了细微改动,可能是由于python版本问题,原文章中的代码在python3.7中无法直接使用

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

老姜家的小旭 发表于 2018-12-13 16:53
刚学习一天python,看完老哥的代码很有收获
lfglfg11 发表于 2018-12-13 17:30
小黑LLB 发表于 2019-2-26 22:49
qing_8125 发表于 2019-8-2 18:06
刚好用到,支持一波老哥
夸克逃逸 发表于 2019-8-15 23:44
刚在csdn上面看到一篇一模一样的应该你就是博主吧。我用了之后报错OverflowError: 416 bytes needed for message, but there is only space for 117。请问是咋回事儿啊,小白表示看不懂。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 14:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表