【发布时间】:2018-03-30 16:31:22
【问题描述】:
实际上我有一个存储客户敏感信息的数据库。 我正在使用类似的东西来加密该数据:
$algo = 'AES-256-CTR';
$key ='password md5 from bdd'
$iv = substr(hash('sha256',$email),0,openssl_cipher_iv_length($algo));
$data = base64_encode($data);
$data = openssl_encrypt($data,$algo,$key,OPENSSL_RAW_DATA,$iv);
如您所见,我正在使用客户的电子邮件为密钥创建 iv 和他的密码 md5。 因此,如果有人破解了我的 bdd,他可以解密敏感数据。 有没有更好的办法呢,知道我的php脚本需要能够解密数据才能使用
我的想法:
-使用服务器上的可执行文件创建/修改密码和/或 iv 并进行解密,并且 php 脚本为此调用。
-使用第二个服务器来存储密码并且需要调用 php 脚本进行解密。
【问题讨论】:
-
如果有人可以访问您的数据库和您的源代码(这确实是他们知道如何对“敏感数据”进行逆向工程的唯一方法,对),那么我会说无论如何你都已经骨瘦如柴了。
-
@PatrickQ 这通常是我处理它的方式。如果他们两个都得到了,那就结束了,因为这意味着他们都在服务器上。游戏结束,游戏结束!
-
您似乎说代码不是“可找到的”?如果是这样,添加第二台服务器来存储密码并进行数据解密应该是有利可图的?
-
如果有人进入服务器直接获取数据库文件,他们也可以获取网站源代码。但是,如果某人只是获得了数据库的内容(sql 注入攻击、其他数据库漏洞),那么他们不一定有权访问源代码。入侵服务器通常比通过不恰当地使用标准开源代码库等来转储数据库内容更困难。
-
计数器需要一个随机起始值,键和计数器起始值组合决不能重复使用。当使用密码时,密钥应该由包含迭代的函数(如 PBKDF2)派生而来。简单地使用 MD5 并不安全。
标签: php encryption cryptography