Được rồi, đây là lần đầu tiên tôi làm việc với mã hóa trên một dự án. Tôi đang sử dụng nhà cung cấp dịch vụ lưu trữ của mình cho SSL, nhưng tôi cũng muốn mã hóa các phần của cơ sở dữ liệu nhạy cảm. Vì điều này, tôi được yêu cầu sử dụng OpenSSL. Tôi đang thử nghiệm nó trên localhost của tôi (WAMP), và đã cài đặt OpenSSL và bật các PHP và Apache SSL mods. Được rồi, vì vậy tôi đã làm theo hướng dẫn và, bằng cách sử dụng một số phương pháp được đề xuất, đã có thể tạo khóa công khai và lưu trữ nó dưới dạng tệp. Vì lý do nào đó, tôi dường như không thể tạo khóa riêng. Tôi sẽ gửi hai phiên bản của mã mà tôi đã cố gắng:OpenSSL sẽ không tạo khóa riêng tư?
// 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
echo $privateKey;
?>
này tạo ra một tập tin public.key, nhưng cung cấp cho tôi những lời cảnh báo "openssl_pkey_export_to_file(): không thể có được chìa khóa từ thông số 1:" và "openssl_pkey_get_details () hy vọng tham số 1 là tài nguyên, boolean. "
Tôi cũng đã cố gắng một phương pháp khác:
$config = array(
"config" => "E:/wamp/bin/apache/apache2.2.22/conf/openssl.cnf",
"digest_alg" => "sha512",
"private_key_bits" => 1024,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
);
// Create the private and public key
$res = openssl_pkey_new($config);
// Extract the private key from $res to $privKey
openssl_pkey_export($res, $privKey, NULL);
echo "Private Key: ".$privKey;
// Extract the public key from $res to $pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo "Public Key: ".$pubKey;
$data = 'plaintext data goes here';
echo "Data: ".$data;
// Encrypt the data to $encrypted using the public key
openssl_public_encrypt($data, $encrypted, $pubKey);
echo "Encrypted: ".$encrypted;
// Decrypt the data using the private key and store the results in $decrypted
openssl_private_decrypt($encrypted, $decrypted, $privKey);
echo "Decrypted: ".$decrypted;
này được cho là để echo tất cả mọi thứ, không may kết quả của tôi là một chìa khóa trống riêng, chìa khóa công cộng tốt, rõ, và văn bản được mã hóa, và một lỗi khi cố gắng để giải mã: "openssl_private_decrypt(): thông số khóa không phải là khóa riêng hợp lệ"
Rõ ràng, tôi đang gặp sự cố với tạo khóa cá nhân. Tôi đã tìm kiếm trên Internet kỹ lưỡng và không thể sửa chữa nó, mặc dù tôi đã triển khai mã đơn giản mà dường như làm việc cho mọi người khác.
Cảm ơn trước, Elie Zeitouni
Bạn đã kiểm tra giá trị trả về của hàm chưa? – doptimusprime