gpt4 book ai didi

php - 使用 PHP 的非对称加密

转载 作者:可可西里 更新时间:2023-11-01 13:37:11 25 4
gpt4 key购买 nike

我有一个让我发疯的问题。

我创建了一对 key :

$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"];

使用这段代码,我有 $pubKey$privKey

我可以正确地加密/解密,但我对DECRYPTION有很大的疑问。

目前我加密数据在做:

openssl_public_encrypt($data, $encrypted, $pubKey);

它正确地加密了我的数据,但是阅读 PHP 文档,我发现:

http://php.net/manual/en/function.openssl-public-decrypt.php

我可以使用公钥解密数据吗??为什么??

我知道公钥对加密数据有用,但只有私钥的所有者才能解密数据。

如果我可以使用公钥解密数据,让知道公钥的用户轻松解密消息。

有人能给我解释一下吗?我正在寻找一种使用两个 key 的方法,第一个用于加密,第二个(仅第二个)用于解密。

谢谢

最佳答案

在非对称公钥/私钥加密中通常:

  1. Bob 生成了他的公钥/私钥对
  2. Bob 分享了他的公钥
  3. Alice 使用 Bob 的公钥加密一些消息
  4. 她发送消息
  5. 只有 Bob 可以用他的私钥解密。

enter image description here

现在我们可以使用 openssl 库来学习基本的密码学。请注意,以下代码不适用于生产软件,仅用于学习非对称加密的基础知识。

使用该方法和以下代码 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生成 key 对发送给Alice,在真实环境中必须有公钥共享机制。

当 Alice 得到 Bob 的公钥时,她用这个 key 加密她的消息:

/** 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;

推荐的生产加密库

如果您的目标是安全的生产系统,请使用 libsodium。有了它,您可以加密消息...

// Generating your encryption key
$key = \Sodium\randombytes_buf(\Sodium\CRYPTO_SECRETBOX_KEYBYTES);

// Using your key to encrypt information
$nonce = \Sodium\randombytes_buf(\Sodium\CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = \Sodium\crypto_secretbox('test', $nonce, $key);

...并解密消息...

$plaintext = \Sodium\crypto_secretbox_open($ciphertext, $nonce, $key);
if ($plaintext === false) {
throw new Exception("Bad ciphertext");
}

...等等。

What is a nonce?

Check the Full manual for using it with PHP

仔细阅读,加密不是一周就能学会的。有一些注意事项。

关于php - 使用 PHP 的非对称加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com