【问题标题】:Encrypt message with Cryptico public key using PHP使用 PHP 使用 Cryptico 公钥加密消息
【发布时间】:2014-01-09 23:23:01
【问题描述】:

是否可以使用Cryptico 从密码短语生成 RSA 公钥,然后使用 PHP 使用该公钥加密消息,然后使用 JavaScrpt 使用原始密码短语对其进行解密?

Cryptico 本身似乎工作得很好,但我正在尝试使用 phpseclib 使用 Cryptico 生成的公钥加密消息,但我没有得到输出。即使我这样做了,我是否能够对其进行 base64 编码并使用 Cryptico 对其进行解密?

使用将位设置为 1024 的 passphase“stackoverflow Rocks”,我得到了这个公钥:

XEjrqvt5K3pjM2m98ZFQOf9fObVNKPJQ9TYbo4sdNPaUO0NKdLtno8hXa292MiAmwip9JOiplmSQVEvpEnfebGNFFzqNgd4hAS6oXD6zHexVHsHpFTYxfVFQE93eHtbz0Mi7l64rnq6UOQKAB53CXVUev6RqyR6hs4oBiJRAOCs=

但是,当我使用以下代码时,无论是否使用 PKCS1 行,我都没有得到任何输出。

$rsa = new Crypt_RSA();
$rsa->loadKey('XEjrqvt5K3pjM2m98ZFQOf9fObVNKPJQ9TYbo4sdNPaUO0NKdLtno8hXa292MiAmwip9JOiplmSQVEvpEnfebGNFFzqNgd4hAS6oXD6zHexVHsHpFTYxfVFQE93eHtbz0Mi7l64rnq6UOQKAB53CXVUev6RqyR6hs4oBiJRAOCs='); // public key

$plaintext = 'tester';
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);
echo $ciphertext;
?>

有谁知道我缺少什么来完成这项工作? - 或者这是不可能的,我在浪费时间?

编辑:------------代码我正在使用重新 owlstead 的评论 ------------- 尝试使用和不使用 PKCS1 线

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->loadKey('-----BEGIN PUBLIC KEY-----
XEjrqvt5K3pjM2m98ZFQOf9fObVNKPJQ9TYbo4sdNPaUO0NKdLtno8hXa292MiAmwip9JOiplmSQVEvpEnfebGNFFzqNgd4hAS6oXD6zHexVHsHpFTYxfVFQE93eHtbz0Mi7l64rnq6UOQKAB53CXVUev6RqyR6hs4oBiJRAOCs=
-----END PUBLIC KEY-----'); // public key

$plaintext = 'tester';
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);
echo $ciphertext;
?>

【问题讨论】:

  • 致任何读者:请勿使用 CRYPTICO 库,它存在多个安全问题和误解

标签: javascript php rsa phpseclib cryptico


【解决方案1】:

是的,这可以工作,因为 Cryptoco 库似乎只使用标准加密原语。您的 PHP 代码似乎需要 PEM 编码的公钥。 Cryptoco 似乎只生成 base 64 编码,因此您需要使用 PEM 页眉和页脚包围编码的公钥:

-----BEGIN PUBLIC KEY-----
XEjrqvt5K3pjM2m98ZFQOf9fObVNKPJQ9TYbo4sdNPaUO0NKdLtno8hXa292MiAmwip9JOiplmSQVEvpEnfebGNFFzqNgd4hAS6oXD6zHexVHsHpFTYxfVFQE93eHtbz0Mi7l64rnq6UOQKAB53CXVUev6RqyR6hs4oBiJRAOCs=
-----END PUBLIC KEY-----

请注意,当前 Cryptoco 协议已损坏,并且使用不受信任的代码(例如在浏览器中使用常规 HTTP 而不是 HTTPS 的 JavaScript)不太可能导致系统安全。我会回避任何没有支持组织或知名密码学家支持的密码库。

【讨论】:

  • 刚刚创建了一个错误报告。
  • 感谢您的回复,但是添加了 -----BEGIN PUBLIC KEY----- & -----END PUBLIC KEY----- 后仍然没有输出跨度>
  • 你能给我你使用 phpseclib 得到输出的完整代码吗?
  • 是的,它只是模数,这意味着 RSA 密钥生成是 bit 关闭的。我会检查公共指数。一般来说,我不会信任一个人看,我也可以进行加密! 像这样的库。大多数时候,他们只是针对创作者的误解进行了测试。好的,所以公共指数是值 3。现在检查 PKCS#1 v1.5 标准,了解如何从中创建编码的公钥。得去购物了……
  • 它只执行 RSA 加密,因此从这个意义上说,它不太容易受到提到的一些问题的影响。不幸的是,我不知道 RSA 组件是否具有生产质量。如果您需要长密文,则必须自己创建协议,因此请注意不要陷入与 cryptico lib 相同的错误 - 在接受之前验证密文上的 MAC,并确保不能跳过该步骤。 JavaScript 和 PHP 在代码黑客中非常流行,它们转化为许多“工作”但不安全的库。
猜你喜欢
  • 1970-01-01
  • 2022-01-28
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多