Aar*_*ple 2 php mysql encryption
我有一个复杂的表单,该表单将数据发布到MySQL数据库中的2个不同表中。那部分工作正常。但是,我需要存储使用特定密钥加密的信息,以便当我的API将数据发送到另一台服务器时,可以在另一端对其进行解密。向我推荐了SHA512,但我不确定。
我有SQL / MySQL经验,但以前从未处理过加密。
我正在使用PHP 7.1 / mysqli
谢谢!
但是,我需要存储使用特定密钥加密的信息,以便当我的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');
Run Code Online (Sandbox Code Playgroud)
设置好处理器后,还可以将盲索引添加到加密行中的每个字段(或“复合盲索引”,它由多个纯文本字段组成)。
$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
)
);
Run Code Online (Sandbox Code Playgroud)
盲索引为您提供了强大的功能和灵活性(即,不仅可以加密数据库记录,而且仍可以SELECT通过在WHERE子句中使用盲索引来构造高效的查询),但是如果您偏离所提供的建议,则可能导致数据泄漏由计划者。
但是,如果您按指示使用它,则可以对数据库的安全性提出有力的论据,这将受到第三方安全评估人员的审查(无论您是否使用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);
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找安全,易于使用的解决方案,CipherSweet可以助您一臂之力,但并不是您要找的100%。仍然需要使用一些特定于应用程序的可用性逻辑。
如果您需要那种难以捉摸的100%交钥匙易于使用的解决方案,请要求安全公司为您构建它。Paragon Initiative Enterprises(开发和维护CipherSweet)提供了此类服务。(免责声明:我为PIE工作。)
向我推荐了SHA512,但我不确定。
正如其他人所述,SHA512是哈希函数,而不是密码。区别很重要。