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

Yellow · May 06, 2020 · Last by Yellow replied at May 07, 2020 · 3060 hits

【求助】使用 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 包好点。

Yellow #3 · May 06, 2020 Author
Jerry li 回复

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

Yellow #4 · May 06, 2020 Author
YueChen 回复

好的,感谢。

Author only
Yellow #6 · May 07, 2020 Author
Acanyi Odinson 回复

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up