【发布时间】:2017-11-20 11:13:38
【问题描述】:
我已经阅读了很多关于加密的内容,并且知道自 php 7 以来出现了很多新事物。我正在编写两个函数(加密和 decrpyt)来将加密数据存储在我的数据库中。
我了解 openssl 函数的工作原理,但我想知道我是否将它正确地存储在我的数据库中,或者我应该安全地说。我的代码如下:
function wm_encryptString($string) {
$method = 'aes-256-xts';
$key = random_bytes(16);
$iv = random_bytes(16);
$cipherText = openssl_encrypt($string, $method, $key, 0, $iv);
$cipherText = $key.$iv.$cipherText;
$cipherText = base64_encode($cipherText);
return $cipherText;
}
function wm_decryptString($cipher) {
$cipher = base64_decode($cipher);
$method = 'aes-256-xts';
$key = substr($cipher, 0, 16);
$iv = substr($cipher, 16, 16);
$cipher = substr($cipher, 32);
$readableText = openssl_decrypt($cipher, $method, $key, 0, $iv);
return $readableText;
}
当我运行这两个函数时,它会很好地加密和解密。我的具体问题是,是否使用随机字节生成密钥和 IV 安全并将其附加到密文安全以存储在数据库中?我正在存储一些敏感信息,并希望确保对其进行安全加密。
我的第二个问题是,我知道我可以使用这些函数加密字符串,但我可以使用相同的函数加密 blob 吗?我在我的数据库中存储了一些文档(我知道你们中的许多人会说永远不要将文档存储在数据库中,但我使用数据库,因为我只存储了几个文档,少于 100 个,并且它使备份更容易)。我可以使用相同的功能加密 blob/文件吗?
如果我希望我的应用尽可能安全,我们将不胜感激。注意我知道我必须采取更多的安全措施来确保我的应用程序是安全的,我的问题是针对加密的。谢谢你。
【问题讨论】:
标签: php mysql encryption cryptography php-openssl