我将密码和个人数据存储在数据库中。加密这些值以进行保护的最强方法是什么。
另外,数据库中信用卡信息加密的最佳方法是什么?或者我应该使用其他东西来存储信用卡信息,而不是 mysql 数据库?
谢谢。
我将密码和个人数据存储在数据库中。加密这些值以进行保护的最强方法是什么。
另外,数据库中信用卡信息加密的最佳方法是什么?或者我应该使用其他东西来存储信用卡信息,而不是 mysql 数据库?
谢谢。
我认为在 SQL 中存储任何内容都很好,只需先对其进行加密。如果您需要以某种方式识别数据(例如使用数据库条目的唯一密钥),请创建一个随机生成的字符串或安全哈希,并将其与加密数据一起存储。
最好坚持使用经过尝试和测试的东西。因为它是一个数据库(可能是一个计费系统),所以快速检索会很好。所以远离非对称加密——如果你需要与某人共享对称密钥,你应该只使用它来加密对称密钥。
AES 的某些特定强度(例如 256 位)应该没问题。我很高兴知道我们以这种方式获得的我的个人详细信息。
在存储用户密码方面,通常的做法是生成一个盐(随机字符串),然后使用安全散列算法(RIPEMD、SHA1、MD5)对用户密码与此盐相结合进行散列。
这可以防止预先计算的字典破解程序恢复密码,因为它还需要处理所有随机盐。
不要加密密码,只对它们进行哈希处理。无需能够以明文形式恢复密码,它只会使您的系统通过这一个主密钥容易受到攻击。不要使用用户可以选择的密钥对用户数据进行加密,这将导致数据在密钥丢失时无法恢复。为用户提供在丢失密码时恢复对其帐户的访问权限的常用方法。
如果你真的需要隐藏用户名,也许你应该问问自己你正在使用的数据架构。一般来说,个人数据,尤其是计费数据不应该存储在明显的地方,它应该只能由受信任的方访问。这些受信任方将需要查看用户名和信息的内容,因此可能不需要加密。
如果您在开放的互联网上传输用户信息,请对其进行加密。
如果您担心数据库服务器上用户信息的安全性,不妨考虑与云或数据托管提供商合作,他们可以为您的服务器提供一些额外的物理安全性。
加密只是强大的安全策略的一部分。特别关注建立安全环境以开展业务的人为因素。在需要知道的基础上分发对敏感资源的访问。如果所有密钥丢失,请确保您安排备份或某种数据恢复方式。
请注意,在存储信用卡数据时,加密并不是您唯一需要担心的事情。还有严格的审核要求和许多其他问题(如果您不熟悉,请参阅PCI 网站)。
虽然您可能设法获得 PCI 合规性,但如果您并不真正熟悉必要的安全措施,那么这样做可能会让您承担巨额责任。如果您的系统遭到破坏或被发现不合规,您将面临严重的罚款。
查看Authorize.net等支付提供商以获取替代解决方案。具体来说,他们的客户信息管理器产品值得研究,因为他们会在他们的服务器上为您存储安全数据,例如信用卡信息。