我在一个项目中,我们需要构建一个应用程序来将敏感信息存储在 mysql 数据库中。我希望在应用程序中重用一个密钥,因为我们需要加密输入的数据并稍后解密以显示信息。
我正在研究libsodium,但我有一个问题......他们建议不要重复使用密钥和nouce,如果我们遵循这个,我们以后将无法解密!
有人可以指导我如何处理这个问题吗?
我们将建立一种方法来擦除/更改可能违反的密钥!
我在一个项目中,我们需要构建一个应用程序来将敏感信息存储在 mysql 数据库中。我希望在应用程序中重用一个密钥,因为我们需要加密输入的数据并稍后解密以显示信息。
我正在研究libsodium,但我有一个问题......他们建议不要重复使用密钥和nouce,如果我们遵循这个,我们以后将无法解密!
有人可以指导我如何处理这个问题吗?
我们将建立一种方法来擦除/更改可能违反的密钥!
这确实是一个广泛的问题。这实际上取决于您要保存的信息以及它的敏感程度。此链接描述加密类型和用法。
https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html
一个例子是使用 AES_ENCRYPT 和 AES_DECRYPT。
这是 AES_ENCRYPT 和 AES_DECRYPT MySql 函数的快速示例。
将您的数据库表设置为我使用 BLOB 的二进制类型。
其次,创建一个可以使用的密钥。
插入加密的数据库。
从数据库中选择解密的数据。
这将生成一个随机字符串。
function randomString($length) {//This is a function to create a random String.
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$string = '';
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters)-1)];}
return $string;}
$ourKey = randimString(16);//get our String in a Varable($ourKey).
在 Insert 上使用 AES_ENCRYPT MySQL 函数。
$ourInsert = "INSERT INTO MY_TABLE(FIRST_NAME, OUR_KEY)VALUES(AES_ENCRYPT(FIRST_NAME,'".$ourKey."'), ".$ourKey.")";
使用 AES_DECRYPT MySQL 函数对其进行解密。
$ourSelect = "SELECT AES_DECRYPT(FIRST_NAME, OUR_KEY) AS FIRST_NAME";
对于密码和更敏感的数据,请使用 PHP 的 password_hash() 函数。为此,您的数据库表至少需要 75 个字符。这是一个更详细地解释的链接。
http://www.php.net/manual/en/function.password-hash.php
请注意,您不能解密 password_hash 仅与其他数据匹配。
如何使用 password_hash 对密码进行哈希处理并将其插入数据库的示例。
$hashedPassWord = password_hash(users password, PASSWORD_BCRYPT, array("cost" => 17));
$insertPass = "INSERT INTO MY_TABLE(PASSWORD)VALUES(".$hashedPassWord.")";
并检查散列密码从 db 中选择密码并使用密码验证将其与散列密码匹配。
if (password_verify(users_input, db_password_hash)) {/*do something*/}
请注意,这仅涵盖非常基础的内容。您还需要做其他事情,例如使用 PHP 准备好的语句和转义字符串。为了让你开始,我刚刚谈到了加密。