Однако мне нужно хранить информацию, зашифрованную с помощью Особого ключа, чтобы когда мой API отправлял данные на другой Сервер, их можно было расшифровать на другом конце.
Этозвучит примерно так, как если бы проблема была решена CipherSweet .
CipherSweet решает проблему «доступного шифрования» для программного обеспечения PHP и Node.js.
Адаптировано из документации CipherSweet EncryptedRow
:
<?php
use ParagonIE\CipherSweet\BlindIndex;
use ParagonIE\CipherSweet\CipherSweet;
use ParagonIE\CipherSweet\EncryptedRow;
use ParagonIE\CipherSweet\KeyProvider\StringProvider;
// Configuration (with a random hex-encoded example key):
$keyProvider = new StringProvider('4e1c44f87b4cdf21808762970b356891db180a9dd9850e7baf2a79ff3ab8a2fc');
$engine = new CipherSweet($keyProvider);
// Define your row structure
$processor = (new EncryptedRow($engine, 'my_table_name'))
->addTextField('my_column_name')
->addTextField('other_column_name')
->addBooleanField('secret_boolean')
->addIntField('secret_integer')
->addFloatField('secret_decimal_value');
Как только вы настроите свой процессор, вы также можете добавить слепые индексы к каждому полю в зашифрованной строке (или «составные слепые индексы», которые состоят из нескольких открытых текстовых полей).
$processor->addBlindIndex(
'my_column_name', // column
new BlindIndex(
'my_column_name_index', // index name (used in key derivation)
[], // Empty array: No transformations,
8, // Index size (bits); use the planner to get recommended sizes
)
);
Будьте осторожны с слепой индексацией !
Слепые индексы дают вам большую мощность и гибкость (т.е. вы можете не только шифровать записи базы данных, но иможет по-прежнему создавать выполнимые запросы SELECT
с использованием скрытых индексов в предложении WHERE
), но вы можете вносить утечки данных, если вы отклоняетесь от рекомендаций, представленных планировщиком.
Но если вы используете его по назначению вы можете привести веские аргументы в пользу безопасности вашей базы данных , которые будут выдерживать проверку со стороны сторонних оценщиков безопасности (что вам следует абсолютно hнезависимо от того, используете ли вы CipherSweet или нет).
Как только ваш процессор сконфигурирован (с или без слепых индексов), вы можете шифровать / дешифровать строки следующим образом:
// Encrypting/decrypting an example row
$plaintext = [
'unspecified' => 'not defined in the processor, will remain unencrypted',
'my_column_name' => 'foo',
'other_column_name' => 'bar',
'secret_boolean' => false,
'secret_integer' => 123456,
'secret_decimal_value' => 3.14
];
[$encryptedRow, $indexes] = $processor->prepareRowForStorage($plaintext);
// Now use $encryptedRow and $indexes in your database queries
// To decrypt, you only need the first item ($encryptedRow)
$decrypted = $processor->decryptRow($encryptedRow);
Если вы ищете безопасное и простое в использовании решение, CipherSweet поможет вам в этом, но не на 100% того, что вы ищете. В нем все еще есть некоторая логика юзабилити для конкретных приложений, которую необходимо закрепить.
Если вам нужно это неуловимое простое в использовании 100% -ное решение под ключ, попросите компанию по безопасности создать его. для тебя. Paragon Initiative Enterprises (которая разработала и поддерживает CipherSweet) предлагает такие услуги. (Отказ от ответственности: я работаю на PIE.)
SHA512 был рекомендован мне, но я не уверен.
Как уже говорили другие, SHA512 является хэш-функцией,не шифр. Разница важна .