【问题标题】:Javascript decrypt long messages RSAJavascript解密长消息RSA
【发布时间】:2013-10-24 05:49:15
【问题描述】:

我正在尝试使用 javascript(使用 crypto-js 和 jsbn 库)在 RSA 中加密/解密长消息。

到目前为止,要加密/解密短消息,我有以下代码:

function encrypt(signedCert, msg) {
    key = new RSAKey();
    m = asciiToHex(msg);
    m = new BigInteger(m, 16)
    //n and e retrieved from the digital certificate
    key.setPublic(signedCert.msg.subject.pk.n, signedCert.msg.subject.pk.e);
    var ctxt = key.doPublic(m).toString(16);
    return ctxt;
}

function decrypt(sk, ctxt) {
    key = new RSAKey();
    c = new BigInteger(ctxt, 16);
    key.setPrivate(sk.n, sk.e, sk.d);
    var ptxt = key.doPrivate(c).toString(16);
    var ptxt = hexToAscii(ptxt);
    return ptxt;
}

当消息很短时,这就像一个魅力。但是,对于我的生活,当消息很长时,我无法弄清楚如何加密/解密!

谁能帮忙?谢谢:)

【问题讨论】:

  • 请不要cross-post
  • @CodesInChaos 请在 crypto.stack 中查看我的回复
  • 1) 即使它适合多个站点,您也需要选择其中一个 2) 加密标签没有很多用户。因此,您不能真正谈论在一天左右之前没有人回答。
  • @CodesInChaos 好吧,我想我会抓住机会,因为我有时间限制并且迫切需要帮助

标签: javascript cryptography rsa


【解决方案1】:

您没有量化“短”和“长”,但我猜您的“长”消息超过了您正在使用的密钥的最大消息大小。

由于 RSA 算法的构造,无法加密大于 RSA 密钥大小的消息。密钥大小通常以位为单位,因此将密钥大小除以 8 以获得可以使用特定密钥加密的最大消息。例如。一个 2048 位的密钥可以加密最多 2048 / 8 = 256 字节的消息。

有关此限制的更深入描述,您可能希望在此处阅读我对类似问题的回答:Message length restriction in RSA

【讨论】:

  • 你好,铱星!感谢您的回答,但是我没有太多选择。这是大学学科的任务。他们指定的只是想出一种加密/解密任意长消息的方法。基本上发生的事情是:如果消息很短,它可以很好地加密/解密。但是如果消息很长:我加密,得到返回的密文,然后去解密,但我得到的不是我的原始消息,而是胡言乱语!
  • 现在,根据您的回答(新评论,因为太长)我现在认为我可以将长消息拆分为不大于 key/8 的部分(也许创建一个数组)。加密每个部分,作为一个整体发送密文,在解密中拆分密文并解密每个部分,然后返回整个纯文本?你怎么看?
  • 比 b/8 略少。您不能使用最后一位,如果您使用适当的填充,则会再花费 40 到 70 个字节。
  • 通常的方法不是使用 RSA 加密消息,而是为对称算法(例如 AES)生成随机密钥,使用对称算法加密消息,然后使用RSA。这既克服了 RSA 消息大小的限制,也克服了 RSA 比大多数对称算法慢得多的事实。但是,如果您需要仅使用 RSA 加密长消息,那么拆分消息可能就足够了。
  • 问题是,我不是 javascript 的重度用户。这个话题非常..令人沮丧。他们反复说这不是编程主题,只是理论,但在这个作业中,我一次又一次遇到我无法解决的 javascript 问题,因为我不经常处理 javascript!我不完全确定使用 AES 是他们所追求的。这个任务应该是关于不对称密码的。话虽如此,我不知道如何在javascript中实现消息的拆分等。
猜你喜欢
  • 2011-02-08
  • 2017-02-16
  • 2013-10-21
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2018-02-21
  • 2023-04-03
相关资源
最近更新 更多