PHP seclib-RSA-加密文本


PHP seclib - RSA - encrypting text

我有一个公钥指数(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("answers"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本身可以选择采用两个参数。第二个告诉它格式,是以10为基础,以256为基础,16为基础,2为基础,等等。如果你有一个以64为基础编码的数字,你需要通过base64_decode传递它,并(可能(告诉Math_BigInteger它是一个以256为基的数字。默认情况下,Math_BigInteger假定数字以10为基数。

要在那之后进行教科书式的RSA(即,没有随机填充-这种方法不应该在现实世界的应用程序中使用(,请执行以下操作:

$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_NONE);
$rsa->encrypt('...');