接口测试 [求助] 使用 python 第三方库 pycryptodome 进行 RSA 加密得到的结果,发起请求,接口接收到请求后,开发 Java 代码私钥解密后请求参数会乱码

Yellow · 2020年05月06日 · 最后由 Yellow 回复于 2020年05月07日 · 2888 次阅读

【求助】使用 python 第三方库 pycryptodome 进行 RSA 加密得到的结果,发起请求,接口接收到请求后,开发 Java 代码私钥解密后请求参数会乱码。

示例
请求参数:
{
"Timestamp":"2020-04-25 17:11:01.039"
}

解密后结果:
�Q&��H�sk��Χr���?6��{\��`0��j{"Timestamp":"2020-04-28 19:15:01.039"}
python 代码:
def rsa_utils(pub_key, message):
    message = json.dumps(message, ensure_ascii=False, separators=(',', ':'))
    message = message.replace("\n", "")
    msg = message.encode("UTF-8")
    length = len(msg)
    print(length)
    default_length = 245
    # 公钥加密
    public_key = "-----BEGIN PUBLIC KEY-----\n" + pub_key + "\n-----END PUBLIC KEY-----"
    pubobj = PKCS1_v1_5.new(RSA.importKey(public_key))
    # 长度不用分段
    if length < default_length:
        # print("True")
        return (base64.b64encode(pubobj.encrypt(msg))).decode("utf-8")
    # 需要分段
    else:
        offset = 0
        res = []
        while length - offset > 0:
            if length - offset > default_length:
                res.append(pubobj.encrypt(msg[offset:offset + default_length]))
            else:
                res.append(pubobj.encrypt(msg[offset:]))
            offset += default_length
        byte_data = b''.join(res)
        # return base64.b64encode(byte_data)
        return (base64.b64encode(byte_data)).decode("utf-8")
麻烦知道原因的同学解答一下,非常感谢!
共收到 6 条回复 时间 点赞

我之前也遇到过类似的场景,用 Python 实现的加密解密和开发用 Java 写的怎么都对不上。
后来放弃了,让开发导一个 jar 包,然后在 Python 里调用 jar 包来加解密。

看看你用的库对应的 java rsa 加解密用的哪种模式,光 rsa 貌似就好多种模式。跨语言公共加解密建议还是用个统一的 so 或者 jar 包好点。

Jerry li 回复

我之前也是想这么做,只是还是想搞明白什么原因。

YueChen 回复

好的,感谢。

仅楼主可见
Acanyi Odinson 回复

呃~~这个是 aes 的加密,rsa 的不知道你有遇到我这种情况吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册