$sha256
содержит непечатаемые символы и поэтому должен отображаться в правильной кодировке, например, шестнадцатеричное с использованием bin2hex
. Это также относится к $encrypted
. $function_rsa
в настоящее время не определено. Предполагая, что это ошибка копирования / вставки и $function_rsa
соответствует $encrypted
, код работает, то есть $decrypted
равно $sha256
:
<?php
// Create a test key pair
$keypair = openssl_pkey_new(array("private_key_bits" => 2048));
openssl_pkey_export($keypair, $privateKey);
$publicKey = openssl_pkey_get_details($keypair);
$publicKey = $publicKey["key"];
$data = "The quick brown fox jumps over the lazy dog";
// Encrypt
$encrypted = "";
$sha256 = hex2bin("3031300d060960864801650304020105000420").hash("sha256", $data, true);
$encrypt_rsa = openssl_private_encrypt($sha256, $partialEncrypted, $privateKey, OPENSSL_PKCS1_PADDING);
$encrypted .= $partialEncrypted;
// Decrypt
$decrypted = "";
$decrypt_rsa = openssl_public_decrypt($encrypted, $partialDecrypted, $publicKey, OPENSSL_PKCS1_PADDING);
$decrypted .= $partialDecrypted;
// Compare
print("Original data: " . bin2hex($sha256) . "\nEncrypted data: " . bin2hex($encrypted) . "\nDecrypted data: " . bin2hex($decrypted));
?>
Другим возможным источником ошибок являются, конечно же, ключи , При необходимости проверьте это снова.
Шифрование ha sh с предшествующим идентификатором ha sh соответствует подписи данных, из которых был сгенерирован ha sh с использованием RSASSA-PKCS1-v1_5- набивка ( RF C 8017 ). Обратите внимание, что подпись данных может быть сгенерирована намного проще с помощью openssl_sign
:
$getPrivate = openssl_pkey_get_private($privateKey);
openssl_sign($data, $signature, $getPrivate, "sha256WithRSAEncryption");
print("\nSignature: " . bin2hex($signature));