Как сохранить значение тега для нескольких различных пар шифрования-дешифрования в методе шифрования строк openssl в php? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь зашифровать и расшифровать строки на моем сервере, используя PHP openssl_decrypt и openssl_encrypt.

Пример кода:

// code for encrypting the string
function encrypt($textToBeEncrypted){
    $cipher = file_get_contents('the_cipher_file', FILE_USE_INCLUDE_PATH);
    $iv     = file_get_contents('the_iv_file', FILE_USE_INCLUDE_PATH);
    $key    = file_get_contents('the_key_file', FILE_USE_INCLUDE_PATH);  
        if (in_array($cipher, openssl_get_cipher_methods())){
            $ciphertext = openssl_encrypt($textToBeEncrypted, $cipher, $key, $options=0, $iv, $tag);

            file_put_contents("the_tag_file", $tag);

            if($ciphertext){
                return $ciphertext;
            }else{
                return null;
            }
        }
        return null;
    }


// code for decrypting the string
function decrypt($textToBeDecrypted){
    $cipher = file_get_contents('the_cipher_file', FILE_USE_INCLUDE_PATH);
    $iv     = file_get_contents('the_iv_file', FILE_USE_INCLUDE_PATH);
    $key    = file_get_contents('the_key_file', FILE_USE_INCLUDE_PATH);
    $tag    = file_get_contents( "the_tag_file");   
        if (in_array($cipher, openssl_get_cipher_methods())){
            $decrypted= openssl_encrypt($textToBeDecrypted, $cipher, $key, $options=0, $iv, $tag);

            if($decrypted){
                return $decrypted;
            }else{
                return null;
            }
        }
        return null;
    }

Проблема этого подхода заключается в том, что для каждого шифрования он генерирует уникальный тег.Пример:

$encrypted = encrypt("Hello World"); // creates tag on file "the_tag_file"
echo decrypt($encrypted); // uses tag from "the_tag_file" and decryption works fine

Однако:

$encrypted_A = encrypt("Hello USA"); // creates tag A on "the_tag_file"
$encrypted_B = encrypt("Hello CANADA"); // overrides tag A on "the_tag_file" with new tag B
$encrypted_C = encrypt("Hello GERMANY"); // overrides tag B on "the_tag_file" with new tag C
echo decrypt($encrypted_A); // uses tag C instead of A and prints null
echo decrypt($encrypted_B); // uses tag C instead of B and prints null
echo decrypt($encrypted_C); // uses tag C and prints "Hello GERMANY"

Поэтому возникает мой вопрос: как мне поддерживать разные теги для разных строк, так как для каждой расшифровки мне нужен определенный генерируемый тегна этапе шифрования.Моя цель - иметь возможность обновлять содержимое базы данных зашифрованными строками с серверной части, а также получать зашифрованное содержимое, расшифровывать его на серверной части и продолжать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...