兼容性rsa.js和rsa.php

时间:2012-01-19 21:00:17

标签: javascript php rsa phpseclib

我有一个网站,我正在尝试使我的表单安全。我做了一些研究,即使我不是程序员,我通过自制的质询 - 响应机制对用户进行身份验证,并且我使用mcrypt库中的aes加密来加密表单值。到目前为止都很好。除了我的密码需要从客户端发送到服务器...安全。我认为RSA会做到这一点。所以我下载了phpseclib,我已经在服务器端成功加密/解密了。现在,我需要一个客户端代码来加密RSA。我在这里使用了这个库http://www.ohdave.com/rsa/。 现在......这是我的问题。

  1. 我使用phpseclib在php中生成一对密钥。
  2. 我提取私有指数,公共指数和模数(公共)。
  3. 我将公共指数和模数(公共)发送到javascript。

    include('Scripts/phpseclib/Crypt/RSA.php');
    require_once('Scripts/phpseclib/Math/BigInteger.php');
    
    session_start();
    
    $rsa = new Crypt_RSA();
    
    extract($rsa->createKey(512));
    
    $priv = $rsa->_parseKey($privatekey,CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
    $privExp = $priv['privateExponent']->toHex();
    $pubExp = $priv['publicExponent']->toHex();
    $pubMod = $priv['modulus']->toHex();
    
    
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
     $_SESSION['privatekey']=$privatekey;
       $_SESSION['publickey']=$publickey;    
    
  4. javascript生成一个随机数,它将成为我将进一步用于aes-encryption的密码。 javascript将使用从服务器发送的公共指数和模数(公共)来加密javascript中随机生成的字符串(将成为aes-key),并将其发送回php服务器解密。

    password = random(); 
    
    key = new RSAKeyPair(
     "<?php echo $pubExp; ?>",
     "",
     "<?php echo $pubMod; ?>"
    );
    
    x = encryptedString(key,password);
    y = decryptedString(key,x);
    document.write(" text cryptat = "+x);
    document.write(" text decryptat = "+y);
    
    window.location = "rsa.php?text="+x;
    </script>    
    

    php服务器将接收加密的字符串并使用私有指数从start开始生成将能够解密aes-key(由客户端javascript随机生成),从而在客户端 - 服务器之间生成密钥协议外界干预。

    问题:javascript加密随机字符串....但不是PKCS#1 v1.5 ..... phpseclib只接受PKCS#1 v1.5填充,因此php脚本无法正确解密。 / p>

    请帮助我查找或修改JavaScript,以便向PHP脚本输出预期的加密字符串格式PKCS#v 1.5。

1 个答案:

答案 0 :(得分:0)

phpseclib默认执行OAEP填充。这是一个使javascript与之互操作的演示:

http://www.frostjedi.com/terra/dev/rsa/index.php

这是一个在javascript中执行PKCS#1填充的网站:

http://www-cs-students.stanford.edu/~tjw/jsbn/rsa.html