Dai*_*ail 6 php openssl public-key-encryption
我有一个让我发疯的问题.
我创建了一对键:
$res = openssl_pkey_new(array('private_key_bits' => 2048));
/* Extract the private key from $res to $privKey */
openssl_pkey_export($res, $privKey);
/* Extract the public key from $res to $pubKey */
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
Run Code Online (Sandbox Code Playgroud)
使用此代码,我有$pubKey和$privKey.
我可以正确地加密/解密,但我对DECRYPTION有很大疑问.
目前我的密码数据正在做:
openssl_public_encrypt($data, $encrypted, $pubKey);
Run Code Online (Sandbox Code Playgroud)
它正确加密我的数据,但是阅读PHP Doc,我发现:
http://php.net/manual/en/function.openssl-public-decrypt.php
我可以使用PUBLIC KEY解密数据吗?为什么?
我知道公钥对ENCRYPT数据很有用,但只有私钥的所有者才能解析数据.
如果我可以使用公钥解密数据,那么让知道公钥的用户可以轻松解密这些消息.
有人可以向我解释一下吗?我正在寻找一种方法来使用两个键,第一个是ENCRYPT,第二个(只有第二个)是DECRYPT.
谢谢
在不对称的公/私钥加密中,通常:
使用该方法和以下代码,Alice可以成功地向Bob发送消息
/** BOB CODE **/
$key = openssl_pkey_new(array('private_key_bits' => 2048));
$bob_key = openssl_pkey_get_details($key);
$bob_public_key = $bob_key['key'];
Run Code Online (Sandbox Code Playgroud)
那是您代码中拥有的基本基础结构,现在是Bob执行的代码。Bob生成密钥对并发送给Alice,在真实环境中,必须有一个公共密钥共享机制。
当爱丽丝(Alice)获得鲍勃(Bob)的公钥时,她使用此密钥来加密消息:
/** ALICE CODE **/
$alice_msg = "Hi Bob, im sending you a private message";
openssl_public_encrypt($alice_msg, $pvt_msg, $bob_public_key);
Run Code Online (Sandbox Code Playgroud)
最终,鲍勃(Bob)收到消息并解密
/** BOB CODE **/
openssl_private_decrypt( $pvt_msg, $bob_received_msg, $key);
print $bob_received_msg;
Run Code Online (Sandbox Code Playgroud)
小智 7
公钥加密的整个想法是每个"用户"都有一个"公钥"和一个"私钥".这些密钥有3种主要实现:机密,经过身份验证和组合.在我的回答中,我将采用'保密'技术.
每个用户都有一个他们分发的"公钥",另一个用户将使用它来加密将要发回的消息,以及他们只为自己保留的"私钥",用于解密消息.他们会收到的.用于加密消息的密钥与用于解密的密钥不同.
"联盟密钥使用"示例:
Bob有:Bob私钥,Bob公钥,Alice公钥
Alice有:Alice私钥,Alice公钥,Bob公钥
鲍勃希望将消息发送给爱丽丝:
Bob使用"爱丽丝公共密钥"来加密的消息,并将其发送=>
Alice使用"爱丽丝私钥"解密的消息.
Alice想回复并向Bob发送消息:
Alice使用'Bob公钥'加密消息,发送消息=>
Bob使用'Bob私钥'来解密消息.
公钥仅用于加密消息
私钥仅用于解密使用公钥加密的消息
现在您已经了解了"公钥"和"私钥"的基本概念,请查看此图像,说明典型的SSL通信和密钥的使用.