Я пытаюсь зашифровать и расшифровать строки на моем сервере, используя 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"
Поэтому возникает мой вопрос: как мне поддерживать разные теги для разных строк, так как для каждой расшифровки мне нужен определенный генерируемый тегна этапе шифрования.Моя цель - иметь возможность обновлять содержимое базы данных зашифрованными строками с серверной части, а также получать зашифрованное содержимое, расшифровывать его на серверной части и продолжать.