【问题标题】:Make Javascript RSA message encryption giving same result使 Javascript RSA 消息加密给出相同的结果
【发布时间】:2013-01-20 15:45:54
【问题描述】:

您好,我正在使用 javascript RSA 加密过程并且它正在工作:

<!DOCTYPE html>
    <html lang="en">
            <head>
            <title></title>
              <script src="jquery-1.7.2.min.js" type="text/javascript"></script>
              <script type="text/javascript" src="base64.js"></script>
              <script type="text/javascript" src="asn1.js"></script>
              <script type="text/javascript" src="jsbn.js"></script>
              <script type="text/javascript" src="prng4.js"></script>
              <script type="text/javascript" src="rng.js"></script>
              <script type="text/javascript" src="rsa.js"></script>
              <script type="text/javascript" src="pemconvert.js"></script>
              <script>
                    function loadpubKey(){
                            var pubkey = "-----BEGIN PUBLIC KEY-----\nMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPBYvSszUjI5psKM958bHTDb+9NONv3X\nWVIGLR9/Al4j8/mqSDMhwFuu9oEyXl80+Ga2cohEQPpWyxzg3/tfGDUCAwEAAQ==\n-----END PUBLIC KEY-----";
                            $("#publicKey").html(pubkey);
                        }
                    function RSAEncryptData()
                        {
                            var Message = $("#Message_to_Encrypt").val();
                            var pubkey = pem_import($("#publicKey").val());             
                            $("#RSAMessageEncrypted").html(pubkey.encrypt(Message));
                        }
            </script>
            </head>
        <body onload="loadpubKey();">
        <h1>RSA Encryption/Decryption using library From :https://github.com/tao-software/jsrsa</h1>
        <form>
                <strong>Public key         :</strong> <textarea rows="3" cols="100"  id="publicKey"></textarea><br>
                <strong>Message to RSA encrypt :</strong> <textarea rows="3" cols="100"  id="Message_to_Encrypt"></textarea><br>
                <input type="button" value="RSA Encrypt" onclick="RSAEncryptData();">
                <strong>RSA encrypted Message :</strong> <textarea rows="3" cols="100"  id="RSAMessageEncrypted"></textarea><br>
        </form> 
        </body>
    </html>

每次我使用相同的消息进行加密时点击“加密”按钮,我都会得到一个新的不同的加密值。我该怎么做才能使这种加密为使用的相同消息提供相同的加密结果?

实际上我想要做的是使用 RSA 使用公钥加密一些电话号码,然后将它们存储在一个表中,之后我将使用 RSA 中的相同公钥加密我将通过一个过程获得的任何电话号码并查看表格是否匹配。

使用上面的脚本,即使我多次加密同一个电话号码,我也永远找不到匹配项,这就是为什么我希望在加密同一个电话号码时结果相同。欢迎任何想法。

提前谢谢你。

【问题讨论】:

  • 应该每次都不一样。出于安全目的,这就是 pkcs#1 块类型 2 填充所做的。为什么你希望它是一样的?
  • 您好,感谢您的回复,我需要它在使用相同的消息进行加密时给出相同的结果,因为我希望稍后能够在我的加密按摩之间进行比较(不用担心关于这个)我听说它需要一个 SALT 或一个 RSA 0 填充,但我很困惑我不知道如何让它做我想做的事。

标签: javascript rsa public-key-encryption


【解决方案1】:

正如 Greg 在 his comment 中所说,PKCS #1 填充中的随机性会导致您的加密结果每次都不同。

根据您的用例,我建议您将电话号码的哈希值与加密数据一起存储。然后,您可以基于哈希执行快速查找。您可能希望在哈希之前对您的电话号码加盐。

请记住,哈希值并不能保证是唯一的,因此您得到两个冲突的哈希值的可能性很小。

【讨论】:

  • 嗨,我只想知道是否有办法让这个 PKCS #1 填充不生成用于加密的随机值,你认为散列 2 个不同的 RSA 加密结果会给出相同的哈希值?我不这么认为。谢谢。
  • 随机性是有充分理由的,不要试图删除它。我建议您对未加密的电话号码进行哈希处理,这将始终产生相同的结果。
  • “随机性是有充分理由的,不要试图删除它”hhhh 请我发布这个问题,因为我需要它给出相同的结果,我需要修改它不要'你理解和抱歉。我不能使用哈希,因为它不可逆,并且想使用相应的私钥解密电话号码(在找到匹配项后)(我为此设置了一个进程)。
  • 我建议您存储 哈希值和加密值。
【解决方案2】:

听起来您想用您的私钥签署一条消息,并让其他人用您的公钥验证该签名。您已链接以提供 RSASign 和 RSAVerify 方法的库,可能位于 RSAKey 实例的 signverify 方法下。我不是 JS 程序员,所以我只能说这就是它的样子。

【讨论】:

  • 你好,实际上我想做的是使用 RSA 使用公钥加密一些电话号码,然后将它们存储在一个表中,然后我将加密我将通过一个过程获得的任何电话号码在 RSA 中使用相同的公钥,并在表中查找是否匹配。使用上面的脚本,即使我多次加密同一个电话号码,我也永远找不到匹配项,这就是为什么我希望在加密同一个电话号码时结果相同。我希望我很清楚,感谢任何可以提供帮助的想法。
  • @user1789193:您应该编辑您的问题以添加该信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多