PHP seclib - RSA - 加密文本

时间:2015-07-04 22:37:13

标签: php encryption rsa public-key phpseclib

我有一个公钥指数(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)"。我想我会使用其中一个,但首先我需要知道公钥。那么..我知道公钥吗?正如我所说,我有公钥指数和公钥模数,但是可以根据这两个值构建公钥吗?

我会非常高兴得到一些解释或工作实例。

1 个答案:

答案 0 :(得分:2)

通常,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它是一个基数为256的数字。默认情况下,Math_BigInteger假定数字为base-10。

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

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