【问题标题】:RSA communication between Javascript and PythonJavascript 和 Python 之间的 RSA 通信
【发布时间】:2013-05-29 20:50:28
【问题描述】:

我正在开发一个原型,因此它需要在 Chrome 扩展程序和 Python 服务器之间使用 RSA。

到目前为止,我计划使用https://sourceforge.net/projects/pidcrypt/https://www.dlitz.net/。但是,虽然我可以按照文档进行解密和加密工作,但我无法让一个人解密彼此的消息。

有人可以建议互操作的库,或者让我知道我是否对这些库做错了什么?

根据我的研究,pidder 使用 RSA PKCS#1 加密样式填充(类型 2)。通过谷歌搜索,我发现它是 PyCrypto 称为 PKCS1_OAEP 的类型。我不太确定,但我已经尝试过标准和其他两个。

非常感谢您的帮助!

【问题讨论】:

    标签: javascript python-2.7 rsa pycrypto pidcrypt


    【解决方案1】:

    Javascript 库 (pidCrypt) 使用 PKCS#1 v1.5 进行 RSA 加密,而不是 OAEP。

    PyCrypto 支持(参见 here)。这是加密的例子:

    from Crypto.Cipher import PKCS1_v1_5
    from Crypto.PublicKey import RSA
    from Crypto.Hash import SHA
    
    message = 'To be encrypted'
    h = SHA.new(message)
    
    key = RSA.importKey(open('pubkey.der').read())
    cipher = PKCS1_v1_5.new(key)
    ciphertext = cipher.encrypt(message+h.digest())
    

    及解密:

    from Crypto.Hash import SHA
    from Crypto import Random
    
    key = RSA.importKey(open('privkey.der').read())
    
    dsize = SHA.digest_size
    sentinel = Random.new().read(15+dsize)      # Let's assume that average data length is 15
    
    cipher = PKCS1_v1_5.new(key)
    message = cipher.decrypt(ciphertext, sentinel)
    
    digest = SHA.new(message[:-dsize]).digest()
    if digest==message[-dsize:]:                # Note how we DO NOT look for the sentinel
         print "Encryption was correct."
    else:
         print "Encryption was not correct."
    

    请注意,已知 PKCS#1 v1.5 加密方案被严重破坏。

    【讨论】:

    【解决方案2】:

    是否可以改用 HTTPS ajax 连接?这样,您就可以进行端到端加密,而无需自己担心。

    【讨论】:

    • 正如我在问题中所说,不。我正在通过另一台服务器进行隧道传输,因此需要对部分消息进行加密,以便第二台服务器可以对其进行验证。
    • 你可以试试这两个 libsodium/NaCL 端口:github.com/tonyg/js-nacl & github.com/dstufft/pynacl。尽管我从未使用过它们,但它们可以互操作。
    猜你喜欢
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2017-08-13
    相关资源
    最近更新 更多