RSA加密/解密与Javascript和PHP兼容

8 javascript php rsa

我想在Javascript中加密,然后在PHP中解密.有Javascript和PHP的RSA实现,但它们不兼容.我无法正确解密我用Javascript加密的内容.

有没有人知道一个兼容Javascript和PHP的库/代码?

谢谢.

tit*_*tel 7

这是一个JavaScript RSA加密库:http://www.ohdave.com/rsa/

而且我认为你可以使用类这样的东西来解密生成的加密字符串 - http://www.phpclasses.org/browse/package/4121.html

让我知道,如果你管理得到这项工作,因为我自己正在研究这个主题(我实际上发现这篇文章自己寻找这个答案:P).

编辑:看,我也发现这个 - http://www.sematopia.com/?p=275-似乎与前两个相关...


Tie*_*eme 7

尝试以下简单示例.

它使用的是一个开源的JavaScript库https://github.com/ziyan/javascript-rsa

HTML/JavaScript的:

<script language="JavaScript" type="text/javascript" src="jsbn.js"></script>
<script language="JavaScript" type="text/javascript" src="rsa.js"></script>

<script language="JavaScript">

    function encryptData(){

        //Don't forget to escape the lines:
        var pem="-----BEGIN PUBLIC KEY-----\
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfmlc2EgrdhvakQApmLCDOgP0n\
NERInBheMh7J/r5aU8PUAIpGXET/8+kOGI1dSYjoux80AuHvkWp1EeHfMwC/SZ9t\
6rF4sYqV5Lj9t32ELbh2VNbE/7QEVZnXRi5GdhozBZtS1gJHM2/Q+iToyh5dfTaA\
U8bTnLEPMNC1h3qcUQIDAQAB\
-----END PUBLIC KEY-----";

        var key = RSA.getPublicKey(pem);

        element=document.getElementById('password');
        element.value=RSA.encrypt(element.value, key);
    }
</script>

<form method='POST' id='txtAuth' onsubmit='encryptData()'>
    <input type='text' name='username'/>
    <input type='password' name='password' id='password' placeholder="password"/>
    <input name='submit' type='submit' value='Submit'>
</form>
Run Code Online (Sandbox Code Playgroud)

PHP:

<?php

if (isset($_POST['password'])) {

    //Load private key:
    $private = "-----BEGIN RSA PRIVATE KEY-----
    MIICXAIBAAKBgQDfmlc2EgrdhvakQApmLCDOgP0nNERInBheMh7J/r5aU8PUAIpG
    XET/8+kOGI1dSYjoux80AuHvkWp1EeHfMwC/SZ9t6rF4sYqV5Lj9t32ELbh2VNbE
    /7QEVZnXRi5GdhozBZtS1gJHM2/Q+iToyh5dfTaAU8bTnLEPMNC1h3qcUQIDAQAB
    AoGAcbh6UFqewgnpGKIlZ89bpAsANVckv1T8I7QT6qGvyBrABut7Z8t3oEE5r1yX
    UPGcOtkoRniM1h276ex9VtoGr09sUn7duoLiEsp8aip7p7SB3X6XXWJ9K733co6C
    dpXotfO0zMnv8l3O9h4pHrrBkmWDBEKbUeuE9Zz7uy6mFAECQQDygylLjzX+2rvm
    FYd5ejSaLEeK17AiuT29LNPRHWLu6a0zl923299FCyHLasFgbeuLRCW0LMCs2SKE
    Y+cIWMSRAkEA7AnzWjby8j8efjvUwIWh/L5YJyWlSgYKlR0zdgKxxUy9+i1MGRkn
    m81NLYza4JLvb8/qjUtvw92Zcppxb7E7wQJAIuQWC+X12c30nLzaOfMIIGpgfKxd
    jhFivZX2f66frkn2fmbKIorCy7c3TIH2gn4uFmJenlaV/ghbe/q3oa7L0QJAFP19
    ipRAXpKGX6tqbAR2N0emBzUt0btfzYrfPKtYq7b7XfgRQFogT5aeOmLARCBM8qCG
    tzHyKnTWZH6ff9M/AQJBAIToUPachXPhDyOpDBcBliRNsowZcw4Yln8CnLqgS9H5
    Ya8iBJilFm2UlcXfpUOk9bhBTbgFp+Bv6BZ2Alag7pY=
    -----END RSA PRIVATE KEY-----";
    if (!$privateKey = openssl_pkey_get_private($private)) die('Loading Private Key failed');

    //Decrypt
    $decrypted_text = "";
    if (!openssl_private_decrypt(base64_decode($_POST['password']), $decrypted_text, $privateKey)) die('Failed to decrypt data');

    //Decrypted :) 
    var_dump($decrypted_text);

    //Free key
    openssl_free_key($privateKey);
}
?>
Run Code Online (Sandbox Code Playgroud)

请享用!

  • 对于未来的读者:David.Ask 在对此答案的拒绝编辑中建议,这也应该添加到头部: `&lt;script language="JavaScript" type="text/javascript" src="jsbn2.js"&gt;&lt; /脚本&gt;` (2认同)

Mar*_*ius 1

如果您将服务器设置为使用 SSL,那么您可以使用 https 通过 ajax 进行加密传输。这可能是在 javascript 和 php 之间加密数据的最佳方法。如果你想自己做,你很有可能会在某个地方搞砸,而且系统也不会安全。

Google 了解如何为您的服务器设置 https。