【问题标题】:Compatibility rsa.js and rsa.php兼容性 rsa.js 和 rsa.php
【发布时间】:2012-02-14 12:48:48
【问题描述】:

我有一个网站,我正在努力确保我的表单安全。我已经做了一些研究,尽管我不是程序员,但我正在通过自制的质询-响应机制对用户进行身份验证,并且我正在使用 mcrypt 库中的 aes 加密对表单值进行加密。到目前为止一切都很好。除了我的 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;    
    

javascript 生成一个随机数,它将成为我将进一步用于 aes 加密的密码。 javascript将使用服务器从php发送的公共指数和模数(public)来加密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 脚本无法正确解密。

请帮助我查找或修改 JavaScript,以便将它期望的加密字符串格式 PKCS# v 1.5 输出到 php 脚本。

【问题讨论】:

  • 你的问题格式很糟糕...
  • 你为什么不只使用 SSL?
  • 我在使用 jsbn 的 rsa.js 时遇到了完全相同的问题...没有任何效果,我找不到任何解决方案

标签: javascript php rsa phpseclib


【解决方案1】:

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

【讨论】:

  • >这是我的了:>> JS encryptedstring = 3d769d784bf0a1cf6234c468ddd9de8442b6a69582d7a797a5e07692d237a07dd699a36cfd2e040e5f09494705188c1ff7b7963f1d739204874d2b9432b9f400; >>JS 加密字符串到字节 = =vxKð¡Ïb4ÄhÝÙÞ„B¶¦•‚×§—¥àv'Ò7 }Ö™£lý._ IGŒ÷·–?s'‡M+”2¹ô; >>明文=(无)。 >这是我用 phpseclib 加密的文本: =mŠrOJ#sé®z…£…²Å¼×àôH•VôF¬Ü¶j6€ãBäù°¹C¿E‡å}¼/XˆcçÚâœV'ZN£ 和 Cear 文本:cojo . >所以它在 php 中有效,但不在 2:js 和 php 之间。我将尝试 OAEP,但怀疑我会成功。尊重!
  • 你能发布你正在使用的私钥和密文的十六进制编码吗?
猜你喜欢
  • 2014-09-24
  • 2012-10-11
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多