当前位置: 首页 > 面试题库 >

使用公共密钥加密,以Javascript加密,以PHP解密

彭琛
2023-03-14
问题内容

我想使用公共密钥加密技术在JavaScript中加密,在PHP中解密。我一直在尝试找到可以完成此任务的库,但是遇到了问题。

我目前正在使用
openpgpjs
,但是我需要所有浏览器的支持,甚至测试页在唯一列为受支持的浏览器(Google
Chrome)上都有错误。

关于最终目标的注意事项:

TCP连接已受SSL保护。 此保护层的主要目的是防御有意或无意的Web服务器日志记录,崩溃转储等。

在PHP方面,将生成一个临时私钥(短时间后它将过期)。调用方(使用Javascript)负责在过期时要求新的公共密钥。私钥到期的原因是为了防止记录的加密数据解密,以防存储私钥的服务器在以后遭到破坏。

服务器受损的情况:有人获得了除数据库服务器之外的所有计算机的备份(并且即使发现了用户名和密码,也由于防火墙无法访问数据库)。由于加密记录的数据的私钥已不复存在,因此攻击者无能为力。


问题答案:

我在登录页面上使用了类似的内容;它使用给定的公共密钥信息(N,e)加密登录凭据,该信息可以在PHP中解密。

它使用以下文件JSBN

  • jsbn.js -使用大整数
  • rsa.js -仅用于RSA加密(使用jsbn.js)
  • rng.js -基本的熵收集器
  • prng4.js -ARC4 RNG后端

加密数据:

$pk = '-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----';
$kh = openssl_pkey_get_private($pk);
$details = openssl_pkey_get_details($kh);

function to_hex($data)
{
    return strtoupper(bin2hex($data));
}

?>
<script>
var rsa = new RSAKey();
rsa.setPublic('<?php echo to_hex($details['rsa']['n']) ?>', '<?php echo to_hex($details['rsa']['e']) ?>');

// encrypt using RSA
var data = rsa.encrypt('hello world');
</script>

这是解码发送的数据的方式:

$kh = openssl_pkey_get_private($pk);
$details = openssl_pkey_get_details($kh);
// convert data from hexadecimal notation
$data = pack('H*', $data);
if (openssl_private_decrypt($data, $r, $kh)) {
   echo $r;
}


 类似资料:
  • 问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(

  • 我正在升级一个平台上的安全。但是,我无法破解如何安全地存储我的加密/解密密钥。 当前安装程序: MySQL Server Webserver 我需要使用aes_encrypt/aes_decrypt存储和读取数据库中的所有敏感数据。但是,加密/解密数据的密钥我想要安全地存储。因此,当某人获得数据库或Web服务器的访问权时,他们将无法轻易猜出组合键或从配置文件中读取组合键。 密钥可以根据我需要读/写

  • 我正在尝试使用KMS和AWS加密SDK加密数据。查看AWS文档中提供的示例,似乎没有地方可以显式设置数据键。 使用由KMS生成的数据密钥使用AWS加密SDK加密数据的推荐方法是什么?

  • 问题内容: 我正在使用JavaScript加密用户密码,如下所示: 它工作正常,但现在我正尝试在服务器端的PHP中像这样解密: 它根本不起作用,解密后的密码字符串看起来很奇怪: 有用的注释后,这是我的JavaScript代码的当前状态: 我正在将saltHex和CipherTextHex发送到PHP服务器,并且正在使用mcrypt_decrypt(),如下所示: 仍然无法使用此更新的代码。 有人可

  • null 解密(PHP) $IVSIZE=mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC); $iv=mcrypt_create_iv($ivsize,MCRYPT_RAND); mcrypt_decrypt(MCRYPT_RIJNDAEL_256,'test',$encrypt,MCRYPT_MODE_CBC,$iv);

  • 我在基本加密/解密方面遇到了麻烦。我到处找了一个可行的例子,但还没有找到一个可行的例子。 -我将使用php加密,使用cryptojs解密,以获得一个小的安全层