简体   繁体   English

phpseclib Crypt_RSA:为什么将公共密钥用于解密?

[英]phpseclib Crypt_RSA: Why is public key used for decryption?

I was looking at the phpseclib manual for RSA encryption and noticed that the public key is used to decrypt the data and private key to encrypt. 我在查看用于RSA加密的phpseclib 手册时 ,发现公用密钥用于解密数据,而专用密钥用于加密。

From what I have read and understand is the public key ment to encrypt and private key to decrypt hence why it is private, or am I missing something? 从我的阅读和理解中,公钥是用来加密的,而私钥是用来解密的,因此为什么它是私有的?或者我丢失了什么?

Example

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
//extract($rsa->createKey());

$plaintext = 'Hello World!';
$privatekey = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCjfQKsF6ExR/zLUKa2qiIr8jwh9s36z5dXIg+S+iZygO3p8ZNHzJlKj9JhHOnp
8FxObW93JwKeoyd17J6Dep1t2vm9SJt+jAm3psNpM2a1fZVJSMhKJSj/S9cNL8AwL8CuAyioKs4R
XFFuq2ASm0gXd1Y6bKHSzeZ49N8onIwueQIDAQABAoGAAvSZ1YQY1yP6wy8qUF+LfhljMmb8isXx
cbMNLoZEpynDA0lpdPETLVijwDsuVFsSxB0w2GnVX4pKBpT4OZ7AFUqphgv1CpeVGXP+6YISZApb
D3yliPL4fwWYi/ttC2ceMylKhohm+Ol6kxYeUitoiOuft2FzE70SCOxZOU23QsECQQDX9PIru6hr
8p4WBq6D829BB4WHnP7K/pj6gCi/iUXNS8cEHml/mJtgOxbSX8aWFDfJFlCmMcp3/zzw35zM/BJh
AkEAwc18aPgie472UunjlPLKelSlS/D8e2ZPLWbB3xyJcBn7CiCzeavpmQSOeVofrKyJfBb3FQut
VZL3AOMnIX9DGQJBALfsnfQxNxf44jrQJgGraq1vwoHla/tnKtLuI8Y9G33lc/JGFIPfbTVgHee+
OlvHjFtu7fEdptrcPwLG77yFUwECQQCq3HIpzVIBYwoSEXh+kgsnDMdqi3zdglad7XFRNcSJ263y
wN/ajlD1ggnmPSmdv8O6bjjKCjB4OIih9KJEKwHJAkBJAFKDTpAWMXBmSWl95Ibkr+2aU6VUQcVS
jhQbDsAWLNOkIrZsS33SS5kEc3LSl6oLH/Lh3759YLkOONHqFFN4
-----END RSA PRIVATE KEY-----';

$publickey = '-----BEGIN PUBLIC KEY-----
MIGJAoGBAKN9AqwXoTFH/MtQpraqIivyPCH2zfrPl1ciD5L6JnKA7enxk0fMmUqP0mEc6enwXE5t
b3cnAp6jJ3XsnoN6nW3a+b1Im36MCbemw2kzZrV9lUlIyEolKP9L1w0vwDAvwK4DKKgqzhFcUW6r
YBKbSBd3VjpsodLN5nj03yicjC55AgMBAAE=
-----END PUBLIC KEY-----';

$rsa->loadKey($privatekey);
$encrypt_text = $rsa->encrypt($plaintext);

$rsa->loadKey($publickey);
$decrypt_text = $rsa->decrypt($encrypt_text);

echo 'INPUT: '.$plaintext.'<br />';
echo 'ENCRYPTED: '.$encrypt_text.'<br />';
echo 'DECRYPTED: '.$decrypt_text.'<br /><br />';
echo 'PRIVATE KEY: '.$privatekey.'<br /><br />';
echo 'PUBLIC KEY: '.$publickey.'<br />';
?>

Thanks 谢谢

If you encrypt with the private key anyone can decrypt it but only with your public key, thus verifying that it came from you. 如果您使用私钥加密,则任何人都可以解密,但只能使用您的公钥解密,从而验证它来自您。 Of course, if you were doing that you'd probably be better off just signing your message. 当然,如果您这样做的话,最好只对邮件签名即可。 The PKCS#1 standards does not define signing and encrypting identically and, indeed, the security proof for a signed message is stronger than the security proof for an encrypted message. PKCS#1标准没有定义相同的签名和加密,实际上,签名消息的安全性证明比加密消息的安全性证明强。

Wrt the phpseclib documentation... it was probably just an oversight or a snafu on the developers part. 编写phpseclib文档...在开发人员方面,这可能只是疏忽大意。 Maybe they realized the mistake but didn't want to fix it immediately as it wasn't a code issue and now just keep on forgetting about it? 也许他们意识到了这个错误,但又不想立即解决它,因为这不是代码问题,现在只是忘却它了吗? I dunno... I know I can do that. 我不知道...我知道我能做到。 I take more pride in my own code than I do in the documentation. 我对自己的代码比在文档中感到更加自豪。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM