PHP 中的 RSA 加密
RSA Encryption in PHP
我不是加密方面的专家,我花了几个小时在互联网上搜索并 whosebug.com 寻找答案,但我仍然被困住了。
我的问题是,我有一个 Public Key Modulus 和一个 Public Key Exponent,两者都给定了。有了这些,我需要加密一条消息。
示例:
mod:
CA498337FDD3D7C5487DBE5101899309B51B9B4708E647F85CC599A6C96ADFF62D7CD6A184DF346A3F707E7A34C5853ABA9030C65773AF604C59B8ED2E78D869F26B57E03CA9D0D45C67B8791AB010482224D108FCE20B515D8B1904B4DB41D0003950245E2382CA62477727E543850BC4FD4235041A44F213A99514EF5F64BE3D7F9DEE9E383062078D4E64ED92A42B94A0466B5BC36DAC55499DEA719A38C3A0C287724F57C64507AB424E9DBCC7F93112CF38D1B5458BFCD454F4907C5A617EBCD0F79DE40BBF8971D7CF225D9425010CF5CF638EF00B2582CDE7EA41DF7D65419B4129BBD37A872372D270B537B95C2DEE078107515B8CE719D5020CF337
exp:
010001
我仍然不知道如何在 PHP 中实现这一点。这是我目前的代码(我使用的是 phpseclib):
$message = "Hello World";
$rsa = new Crypt_RSA();
$rsa->loadKey(
array(
'e' => new Math_BigInteger($pubkey_exp),
'n' => new Math_BigInteger($pubkey_mod)
)
);
$rsa->setPublicKey();
$ciphertext = $rsa->encrypt($message);
但是,我没有从中得到任何输出。
$pubkey_n = 'CA498337FDD3D7C5487DBE5101899309B51B9B4708E647F85CC599A6C96ADFF62D7CD6A184DF346A3F707E7A34C5853ABA9030C65773AF604C59B8ED2E78D869F26B57E03CA9D0D45C67B8791AB010482224D108FCE20B515D8B1904B4DB41D0003950245E2382CA62477727E543850BC4FD4235041A44F213A99514EF5F64BE3D7F9DEE9E383062078D4E64ED92A42B94A0466B5BC36DAC55499DEA719A38C3A0C287724F57C64507AB424E9DBCC7F93112CF38D1B5458BFCD454F4907C5A617EBCD0F79DE40BBF8971D7CF225D9425010CF5CF638EF00B2582CDE7EA41DF7D65419B4129BBD37A872372D270B537B95C2DEE078107515B8CE719D5020CF337';
$pubkey_e = '010001';
$message = "Hello World";
$rsa = new Crypt_RSA();
$r = $rsa->loadkey(
array(
'e' => new Math_BigInteger($pubkey_e, 16),
'n' => new Math_BigInteger($pubkey_n, 16)
),
CRYPT_RSA_PUBLIC_FORMAT_RAW
);
//$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
var_export( $ciphertext = $rsa->encrypt($message) );
似乎有效。
我不是加密方面的专家,我花了几个小时在互联网上搜索并 whosebug.com 寻找答案,但我仍然被困住了。 我的问题是,我有一个 Public Key Modulus 和一个 Public Key Exponent,两者都给定了。有了这些,我需要加密一条消息。
示例:
mod:
CA498337FDD3D7C5487DBE5101899309B51B9B4708E647F85CC599A6C96ADFF62D7CD6A184DF346A3F707E7A34C5853ABA9030C65773AF604C59B8ED2E78D869F26B57E03CA9D0D45C67B8791AB010482224D108FCE20B515D8B1904B4DB41D0003950245E2382CA62477727E543850BC4FD4235041A44F213A99514EF5F64BE3D7F9DEE9E383062078D4E64ED92A42B94A0466B5BC36DAC55499DEA719A38C3A0C287724F57C64507AB424E9DBCC7F93112CF38D1B5458BFCD454F4907C5A617EBCD0F79DE40BBF8971D7CF225D9425010CF5CF638EF00B2582CDE7EA41DF7D65419B4129BBD37A872372D270B537B95C2DEE078107515B8CE719D5020CF337
exp:
010001
我仍然不知道如何在 PHP 中实现这一点。这是我目前的代码(我使用的是 phpseclib):
$message = "Hello World";
$rsa = new Crypt_RSA();
$rsa->loadKey(
array(
'e' => new Math_BigInteger($pubkey_exp),
'n' => new Math_BigInteger($pubkey_mod)
)
);
$rsa->setPublicKey();
$ciphertext = $rsa->encrypt($message);
但是,我没有从中得到任何输出。
$pubkey_n = 'CA498337FDD3D7C5487DBE5101899309B51B9B4708E647F85CC599A6C96ADFF62D7CD6A184DF346A3F707E7A34C5853ABA9030C65773AF604C59B8ED2E78D869F26B57E03CA9D0D45C67B8791AB010482224D108FCE20B515D8B1904B4DB41D0003950245E2382CA62477727E543850BC4FD4235041A44F213A99514EF5F64BE3D7F9DEE9E383062078D4E64ED92A42B94A0466B5BC36DAC55499DEA719A38C3A0C287724F57C64507AB424E9DBCC7F93112CF38D1B5458BFCD454F4907C5A617EBCD0F79DE40BBF8971D7CF225D9425010CF5CF638EF00B2582CDE7EA41DF7D65419B4129BBD37A872372D270B537B95C2DEE078107515B8CE719D5020CF337';
$pubkey_e = '010001';
$message = "Hello World";
$rsa = new Crypt_RSA();
$r = $rsa->loadkey(
array(
'e' => new Math_BigInteger($pubkey_e, 16),
'n' => new Math_BigInteger($pubkey_n, 16)
),
CRYPT_RSA_PUBLIC_FORMAT_RAW
);
//$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
var_export( $ciphertext = $rsa->encrypt($message) );
似乎有效。