我有一个复杂的表单,它将数据发布到MySQL数据库中的两个不同的表中。那部分工作得很好。但是,我需要存储使用特定密钥加密的信息,以便当我的API将数据发送到另一个服务器时,它可以在另一端解密。SHA512是推荐给我的,但我不确定。我有SQL/MySQL的经验,但从未处理过加密。我正在使用PHP 7.1/mysqli谢谢! 最佳答案 但是,我需要存储使用特定密钥加密的信息,以便当我的API将数据发送到另一个服务器时,它可以在另一端解密。这听起来像是CipherSweet要解决的问题。CipherSweet解决了PHP和Node.js软件的“可搜索加密”问题。改编自CipherSweet EncryptedRow documentation:<?phpuse 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');设置好处理器后,还可以将blind indexes添加到加密行中的每个字段(或包含多个纯文本字段的“复合盲索引”)。$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 ));Be careful with blind indexing!盲索引为您提供了大量的灵活性和灵活性(即,不仅可以加密数据库记录,还可以通过在SELECT子句中使用盲索引来构造性能查询),但是如果您偏离规划人员提供的建议,则可以引入数据泄漏。但如果你按照指示使用它,you can make strong arguments for the security of your database将经得起第三方安全评估师的审查(无论你是否使用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)提供此类服务。(免责声明:我为派工作。)SHA512是推荐给我的,但我不确定。正如其他人所说,SHA512是一个散列函数,而不是一个密码。The difference is important。 07-26 06:04