我有一个让我发疯的问题。
我创建了一对键:
$ res = openssl_pkey_new(array(‘private_key_bits’=> 2048));
/ *将$ res中的私钥解压缩到$ privKey * /打开了
签名,一种证明私钥所有者的哈希创建了加密消息。爱丽丝很好地证明鲍勃给她写了一条消息(用爱丽丝的公钥加密) - 而不是乔。 Bob使用他的私钥创建一个唯一的签名,Alice可以使用Bob的公开来确认。
:)
公钥加密的整个想法是每个“用户”都有一个“公钥”和一个“私钥”。这些密钥有3种主要实现:机密,经过身份验证和组合。 在我的回答中,我将采用'保密'技术。
每个用户都有一个他们分发的“公钥”,另一个用户将使用它来加密将要发回的消息,以及他们只为自己保留的“私钥”,用于解密消息。他们会收到的。 用于加密消息的密钥与用于解密的密钥不同。
的 “联盟密钥使用”示例: 强>
鲍勃有 :Bob私钥,Bob公钥, 的 爱丽丝公钥 强> 爱丽丝 :Alice私钥,Alice公钥, 的 鲍勃公钥 强>
的 短发 强> 想要 的 发送消息 强> 至 的 爱丽丝 强> : 鲍勃使用 的 'Alice公钥'加密 强> 消息,发送它=> 爱丽丝使用 的 'Alice私钥'解密 强> 消息。
的 爱丽丝 强> 想回复和 的 向Bob发送消息 强> : 爱丽丝使用 的 'Bob公钥'加密 强> 消息,发送它=> 鲍勃使用 的 'Bob私钥'解密 强> 消息。
公钥仅用于加密消息 私钥仅用于解密使用公钥加密的邮件
既然您知道“公钥”和“私钥”的基本概念是什么, 看一下这个图像,解释典型的SSL通信和密钥的使用。
在不对称的公钥/私钥中通常:
使用该aproach和以下代码,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'];
这是您在代码中使用的基本基础结构,现在是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);
最后,Bob收到消息并对其进行解密
/** BOB CODE **/ openssl_private_decrypt( $pvt_msg, $bob_received_msg, $key); print $bob_received_msg;