Erlang 和 Python 之间的 RSA 加密

RSA encryption between Erlang and Python

如何在 erlang 中加密数据并在 python 中解密?我写了这段代码,但不起作用。怎么解决?

Erlang 代码:

PrvKey = [257, 77181119504409699204797322144340611322502523292227043692039327666381749008487, 77131657261414365158890407156927969457179535804176721705182844017912686753873].
PubKey = [257, 77181119504409699204797322144340611322502523292227043692039327666381749008487].
Enc = crypto:rsa_private_encrypt(<<"hello">>, PrvKey, rsa_pkcs1_padding).
B64 = base64:encode_to_string(Enc).

现在 B64 的值是 "ITSqh/3jlijZR6qxeGjoutUlP5Bvzy+MjULqnY3CSxg=",我将它发送到 python 并尝试解密它。

Python代码:

import rsa
import base64
pub = PublicKey(77181119504409699204797322144340611322502523292227043692039327666381749008487, 65537)
prv = PrivateKey(77181119504409699204797322144340611322502523292227043692039327666381749008487, 65537, 77131657261414365158890407156927969457179535804176721705182844017912686753873, 64921744597321522210744827947572972024591, 1188833109509413311172008266846274857)
b64 = base64.b64decode("ITSqh/3jlijZR6qxeGjoutUlP5Bvzy+MjULqnY3CSxg=")
rsa.decrypt(b64, prv)

这里我有错误python:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/rsa/pkcs1.py", line 232, in decrypt
    raise DecryptionError('Decryption failed')
rsa.pkcs1.DecryptionError: Decryption failed

我的代码有什么问题?

给定 how asymmetric cryptography usually works,你可能应该:

  • 使用 public 密钥加密(即 PubKey)。
  • 用私钥解密。

祝你好运!

编辑>

在 erlang 中,您使用 public 键指数 257,这是错误的。请改用 65537

这应该有效:

PubKey = [65537, 77181119504409699204797322144340611322502523292227043692039327666381749008487].
Enc = crypto:rsa_public_encrypt(<<"hello">>, PubKey, rsa_pkcs1_padding).
B64 = base64:encode_to_string(Enc).

prv = rsa.PrivateKey(77181119504409699204797322144340611322502523292227043692039327666381749008487, 65537, 77131657261414365158890407156927969457179535804176721705182844017912686753873, 64921744597321522210744827947572972024591, 1188833109509413311172008266846274857)
b64 = base64.b64decode("BlqO1VeQJmvqqIYZJx+7QXEJzSb8XuIvVD+v665NkH0=")
rsa.decrypt(b64, prv)