PHP seclib - RSA - 加密文本
PHP seclib - RSA - encrypting text
我有一个 public 密钥指数 (e) 和 public 密钥模数 (n),我需要用它们来加密一些文本。首先 - 知道这两个值是否足以通过 RSA 加密明文并将其发送回所有者,以便他可以使用他的私钥解密?
如果是,如何在 phpseclib ( http://phpseclib.sourceforge.net/ ) library? Theirs examples (http://phpseclib.sourceforge.net/new/rsa/examples.html) 中实现它还不是很清楚。但是,我对RSA的理解也不是很清楚(这就是我目前正在玩它的原因),所以我需要一些帮助。
遗憾的是,这就是我到目前为止能够做到的
define('CRYPT_RSA_EXPONENT', $e);
$rsa = new Crypt_RSA();
Crypt_RSA class 提供 "loadKey($key)" 和 "setPublicKey($key)" 等功能。我想我会使用其中之一,但首先我需要知道 public 键。那么 .. 我知道 public 键吗?正如我所说,我有 public 密钥指数和 public 密钥模数,但是是否可以根据这两个值构造 public 密钥?
我很乐意提供一些解释或工作示例。
通常 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
...等等
如果您将它们作为不同的 "objects" 使用,那么我想知道您是否正在尝试做教科书 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 假定数字以 10 为底。
之后要执行教科书 RSA(即没有随机填充 - 这种方法不应在现实世界的应用程序中使用),请执行以下操作:
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_NONE);
$rsa->encrypt('...');
我有一个 public 密钥指数 (e) 和 public 密钥模数 (n),我需要用它们来加密一些文本。首先 - 知道这两个值是否足以通过 RSA 加密明文并将其发送回所有者,以便他可以使用他的私钥解密?
如果是,如何在 phpseclib ( http://phpseclib.sourceforge.net/ ) library? Theirs examples (http://phpseclib.sourceforge.net/new/rsa/examples.html) 中实现它还不是很清楚。但是,我对RSA的理解也不是很清楚(这就是我目前正在玩它的原因),所以我需要一些帮助。
遗憾的是,这就是我到目前为止能够做到的
define('CRYPT_RSA_EXPONENT', $e);
$rsa = new Crypt_RSA();
Crypt_RSA class 提供 "loadKey($key)" 和 "setPublicKey($key)" 等功能。我想我会使用其中之一,但首先我需要知道 public 键。那么 .. 我知道 public 键吗?正如我所说,我有 public 密钥指数和 public 密钥模数,但是是否可以根据这两个值构造 public 密钥?
我很乐意提供一些解释或工作示例。
通常 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
...等等
如果您将它们作为不同的 "objects" 使用,那么我想知道您是否正在尝试做教科书 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 假定数字以 10 为底。
之后要执行教科书 RSA(即没有随机填充 - 这种方法不应在现实世界的应用程序中使用),请执行以下操作:
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_NONE);
$rsa->encrypt('...');