2

PHPとOpenSSLを使用して、公開鍵を使用して一部のデータを暗号化し、それを再度復号化しようとしています。

次のコードを使用して、public.keyとprivate.keyを生成しました。

// generate private key
$privateKey = openssl_pkey_new(array(
    'private_key_bits' => 1024,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
));
// write private key to file
openssl_pkey_export_to_file($privateKey, 'private.key');
// generate public key from private key
$publicKey = openssl_pkey_get_details($privateKey);
// write public key to file
file_put_contents('public.key', $publicKey['key']);
// clear key
openssl_free_key($privateKey);

暗号化および復号化するための私のコードは、基本的にPHPのドキュメントから直接引用しています。

// data to encrypt
$data = "This is a long string or other bit of data that i want to encrypt";

// ==== ENCRYPT ====

// read public key
$publicKey =  file_get_contents("public.key");
$publicKey = openssl_get_publickey($publicKey);

// encrypt data using public key into $sealed
$sealed = '';
openssl_seal($data, $sealed, $ekeys, array($publicKey));
openssl_free_key($publicKey);

// ==== DECRYPT ====

// get private key to decrypt with
$privateKey = file_get_contents("private.key");
$privateKey = openssl_get_privatekey($privateKey);

// decrypt data using private key into $open
$open = '';
openssl_open($sealed, $open, $env_key, $privateKey);
openssl_free_key($privateKey);


// display decrypted data:
echo "<p>Decrypted data: ".$open;

なぜそれが機能しないのか、または少なくともどのようなエラーが発生しているのかを知る方法を知っている人はいますか?

4

1 に答える 1

2

この声明を忘れましたか?

$env_key = $ekeys[0];

のサンプルコードを読んで答えを見つけましたopenssl_seal()

于 2012-08-16T12:30:12.907 に答える