1

是否可以使用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;
?>
4

1 回答 1

0

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

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

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

于 2013-12-21T16:30:56.263 回答