我只是在考虑是否可以在数据库中搜索以开头或包含某些字符或字符串的加密字段。
例子:
数据库中的加密文本:“7724bd4ae7cba2c8d182980c7889258b07be344a9c8892de3c303ae03677771c”
解密文本:“杰基”
在 db 中搜索所有以什么开头的加密字段或包括:“Jac”
使用钠来加密/解密具有固定随机数的值(在示例中使用)
<?php
define("VALUE_ENCRYPTION_KEY", hex2bin("01abff4e1bbb9104e8e053bcc0492ad114ee7cbdc8597e4e5296e86c44a66bf0"));
define("VALUE_ENCRYPTION_NONCE", hex2bin('c1126da4358e7e4173f2ccc621dd1801a5949ae9f1896e43'));
define("VALUE_ENCRYPTION_BLOCK_SIZE", 16);
function EncryptValue($value)
{
if (!empty($value)) {
$padded_value = sodium_pad($value, VALUE_ENCRYPTION_BLOCK_SIZE);
$encrypted_value = sodium_crypto_secretbox($padded_value, VALUE_ENCRYPTION_NONCE, VALUE_ENCRYPTION_KEY);
return bin2hex($encrypted_value);
} else {
return null;
}
}
function DecryptValue($value)
{
if (!empty($value)) {
$decrypted_padded_value = sodium_crypto_secretbox_open(hex2bin($value), VALUE_ENCRYPTION_NONCE, VALUE_ENCRYPTION_KEY);
$decrypted_value = sodium_unpad($decrypted_padded_value, VALUE_ENCRYPTION_BLOCK_SIZE);
return $decrypted_value;
} else {
return null;
}
}