OpenSSL шифрование в PHP » Страница 1

-

Общие вопросы.



c1cl0n


репутация: 608
на сайте с 2008 года
сообщений: 11

Oneplus 8 Pro 5G

Возраст - 47

#1

Помогите кто разбирается в пыхе - нужны несколько функций по шифрованию/расшифровке/подписи и верификации сообщений
Нашел некоторую информацию что этим занимается функция openssl_pkey, но в разных примерах с сайта php.net по разному подходят к генерации пар и извлечению ключей, а хотелось бы подвести иметь некую функцию генерации пары не случайно, а из текстовой переменной, по типу ExtractKeysFormPublic($Key) и ExtractKeysFromPrivate($Key). На данный момент есть следующие функции:

1function GenerateResource($Alg, $KeySize, $Type) {
2                return openssl_pkey_new ( array (
3                                "digest_alg" => $Alg,
4                                "private_key_bits" => $KeySize,
5                                "private_key_type" => $Type
6                                )
7                );
8}
9function ExtractKeys($Res) {
10                openssl_pkey_export($Res, $PrivateKey);
11                $PublicKey = openssl_pkey_get_details($Res);
12                $PublicKey = $PublicKey["key"];
13                return array (
14                                "public" => $PublicKey,
15                                "private" => $PrivateKey
16                );
17}
18function EncryptText($Txt, $Pub) {
19                openssl_public_encrypt($Txt, $Out, $Pub);
20                return $Out;
21}
22function DecryptText($Txt, $Priv) {
23                openssl_private_decrypt($Txt, $Out, $Priv);
24                return $Out;
25}
26function SignText($Txt, $Res, $Alg) {
27                openssl_sign($Txt, $Out, $Res, $Alg);
28                return $Out;
29}
30function VerifySign($Txt, $Sig, $Res, $Alg) {
31                $details = openssl_pkey_get_details($Res);
32                $public_key_res = openssl_pkey_get_public($details['key']);
33                return openssl_verify($Txt, $Sig, $public_key_res, $Alg);
34}

и пример использования:
1// Create the private and public key
2$KeyPairResource = GenerateResource("sha512", 1024, OPENSSL_KEYTYPE_RSA);
3$KeyPairArray = ExtractKeys($KeyPairResource);
4$PublicKey = $KeyPairArray['public'];
5$PrivateKey = $KeyPairArray['private'];
6 
7$TextData = "Hello world!";
8 
9// Encrypt text using the public key
10$EncryptedText = base64_encode(EncryptText($TextData, $PublicKey));
11 
12// Decrypt the text using the private key
13$DecryptedText = DecryptText(base64_decode($EncryptedText), $PrivateKey);
14 
15//Create signature
16$Signature = SignText($TextData, $KeyPairResource, "sha256WithRSAEncryption");
17 
18//Verify signature
19$Verifys = VerifySign($TextData, $Signature, $KeyPairResource, OPENSSL_ALGO_SHA256);


тема создана:

Рейтинг: 4
голосов: 1


Яндекс.Метрика