【问题标题】:OverflowError: cannot fit 'long' into an index-sized integer [RSA decrypt]溢出错误:无法将“长”放入索引大小的整数 [RSA 解密]
【发布时间】:2018-09-26 13:54:11
【问题描述】:

我正在尝试使用公钥解密消息:

我知道这不是标准,但在我的情况下,加密是使用私钥完成的,解密是使用公钥完成的。服务器加密数据,将其发送给客户端。客户端有公钥,可以解密来自服务器的数据。

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu8rtXhPxSojY7NyHiOlo
XkVCAwhCaMU7rZleDOxsXIqS4zzEkD87r2DujuCWD/6Fummxem0al8y4gD5M4b4O
K+m7qDJ5K4NCB8eW5D/DQ+dIa63sDroyrmJqtLMOKuWxZqYJXEM6vqDm1vKAZpBv
A04CX5zyN7O3G6rB2mVa2Io+OJXxNx/J7ebe20TE5w5zKqQR+LUs9tVYPrOKDmVj
7b8pv9hbSmK+t+x/Z7von2Fr6WfdqFW/VkD09Cu2r5yc2klyEcdIIDwN5krBpdN4
Gon/BkyD+t1lwmpZOUXvKzWyOPuHazEXcKaAe3PTzVDX5ubwOfiiUis87+ekpoHa
mwIDAQAB
-----END PUBLIC KEY-----

这是用于解密消息的python代码部分:

from Crypto.PublicKey import RSA
import json
import codecs
import base64
from base64 import b64decode

def read(response_json):
    with open(response_json) as r:
        data = json.load(r)
        session = data["output"]["session"]
        return session

def decrypt(session):
    cert = open('publicKey\key.txt', "rb").read()
    publicKey = RSA.importKey(cert)
    decrypted_info = publicKey.decrypt(session)

    return decrypted_info

脚本很快得到一个文件 json,其中有一个名为“会话”的部分是加密的,要正确读取它,我需要通过上面发布的公钥解密,但是当我尝试解密时,我遇到以下错误:

Traceback (most recent call last):
  File ".\decripting.py", line 22, in <module>
    print(r.decrypt(session))
  File "C:\Users\Fabio\...", line 16, in decrypt
    decrypted_info = publicKey.decrypt(session)
  File "C:\Python27\lib\site-packages\Crypto\PublicKey\RSA.py", line 174, in decrypt
    return pubkey.pubkey.decrypt(self, ciphertext)
  File "C:\Python27\lib\site-packages\Crypto\PublicKey\pubkey.py", line 93, in decrypt
    plaintext=self._decrypt(ciphertext)
  File "C:\Python27\lib\site-packages\Crypto\PublicKey\RSA.py", line 237, in _decrypt
    cp = self.key._blind(ciphertext, r)
  File "C:\Python27\lib\site-packages\Crypto\PublicKey\_slowmath.py", line 43, in _blind
    return m * pow(r, self.e, self.n)
OverflowError: cannot fit 'long' into an index-sized integer

我真的不知道如何解决这个问题,我做错了什么吗?

【问题讨论】:

  • “我正在尝试使用公钥解密消息......”解密是使用私钥完成的。
  • @JamesKPolk 我知道,但在我的情况下,加密是使用私钥完成的,解密是使用公钥完成的。服务器加密数据,将其发送给客户端。客户端有公钥,可以解密来自服务器的数据。
  • @JamesKPolk RSA 可以使用任何一种方式。例如,如果我想验证你是某个公钥的所有者,我可以要求你向我发送一些用你的私钥加密的数据,然后我可以用你的公钥解密来验证。

标签: python-2.7 encryption rsa


【解决方案1】:

当您尝试解密字符串而不是字节时,可能会发生这种情况。

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 2019-12-15
    • 2011-06-12
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多