我有一个公钥指数(e)和公钥模数(n),我需要使用它们来加密一些文本。首先——知道这两个值是否足以通过RSA加密明文并将其发送回所有者,以便他可以使用他的私钥解密它?
如果是,如何在phpseclib(http://phpseclib.sourceforge.net/)库中实现这一点?他们的示例(http://phpseclib.sourceforge.net/new/rsa/examples.html)不是很清楚。然而,我对RSA的理解也不是很清楚(这就是我目前正在玩它的原因),所以我需要一些帮助。
可悲的是,这是我到目前为止所能做的
define('CRYPT_RSA_EXPONENT', $e);
$rsa = new Crypt_RSA();
Crypt_RSA类提供了像loadKey($key)和setPublicKey($key)这样的函数。我想我会使用其中之一,但是首先我需要知道公钥。所以…我知道公钥吗?正如我所说,我有公钥指数和公钥模数,但是有可能基于这两个值构造公钥吗?
我会很高兴得到一些解释或工作示例。
通常RSA键是嵌入了模和指数的字符串。
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0
FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/
3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB
-----END PUBLIC KEY-----
…或者…
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZw== phpseclib-generated-key
…等等。
如果你把它们作为不同的“对象”来使用,那么我想知道你是否在尝试做教科书RSA,这不应该在课堂外使用。
无论如何,
<?php
include('Crypt/RSA.php');
include('Math/BigInteger.php');
$rsa = new Crypt_RSA();
$rsa->loadKey(array(
'e' => new Math_BigInteger('...'),
'n' => new Math_BigInteger('...')
));
Math_BigInteger本身可以选择接受两个参数。第二个告诉它格式,无论是base-10、base-256、base-16、base-2等。如果您有一个base64编码的数字,您需要将其传递给base64_decode并(可能)告诉Math_BigInteger这是一个base-256数字。默认情况下Math_BigInteger假设数字是base-10。
之后要做课本RSA(即没有随机填充——这种方法不应该在现实世界中使用),请执行以下操作:
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_NONE);
$rsa->encrypt('...');