Помогите кто разбирается в пыхе - нужны несколько функций по шифрованию/расшифровке/подписи и верификации сообщений
Нашел некоторую информацию что этим занимается функция openssl_pkey, но в разных примерах с сайта php.net по разному подходят к генерации пар и извлечению ключей, а хотелось бы подвести иметь некую функцию генерации пары не случайно, а из текстовой переменной, по типу ExtractKeysFormPublic($Key) и ExtractKeysFromPrivate($Key). На данный момент есть следующие функции:
function GenerateResource($Alg, $KeySize, $Type) {
return openssl_pkey_new ( array (
"digest_alg" => $Alg,
"private_key_bits" => $KeySize,
"private_key_type" => $Type
)
);
}
function ExtractKeys($Res) {
openssl_pkey_export($Res, $PrivateKey);
$PublicKey = openssl_pkey_get_details($Res);
$PublicKey = $PublicKey["key"];
return array (
"public" => $PublicKey,
"private" => $PrivateKey
);
}
function EncryptText($Txt, $Pub) {
openssl_public_encrypt($Txt, $Out, $Pub);
return $Out;
}
function DecryptText($Txt, $Priv) {
openssl_private_decrypt($Txt, $Out, $Priv);
return $Out;
}
function SignText($Txt, $Res, $Alg) {
openssl_sign($Txt, $Out, $Res, $Alg);
return $Out;
}
function VerifySign($Txt, $Sig, $Res, $Alg) {
$details = openssl_pkey_get_details($Res);
$public_key_res = openssl_pkey_get_public($details['key']);
return openssl_verify($Txt, $Sig, $public_key_res, $Alg);
}
и пример использования:
// Create the private and public key
$KeyPairResource = GenerateResource("sha512", 1024, OPENSSL_KEYTYPE_RSA);
$KeyPairArray = ExtractKeys($KeyPairResource);
$PublicKey = $KeyPairArray['public'];
$PrivateKey = $KeyPairArray['private'];
$TextData = "Hello world!";
// Encrypt text using the public key
$EncryptedText = base64_encode(EncryptText($TextData, $PublicKey));
// Decrypt the text using the private key
$DecryptedText = DecryptText(base64_decode($EncryptedText), $PrivateKey);
//Create signature
$Signature = SignText($TextData, $KeyPairResource, "sha256WithRSAEncryption");
//Verify signature
$Verifys = VerifySign($TextData, $Signature, $KeyPairResource, OPENSSL_ALGO_SHA256);
тема создана:
Рейтинг: 4
голосов: 1
- 4
- 1
- 2
- 3
- 4
- 5