为api安全地存储密码而不加密它

时间:2016-10-30 11:10:24

标签: php mysql encryption

我需要在MySql数据库中存储密码,以便与外部公司的API一起使用。

在我的脑海中,所有密码都应该在数据库中进行哈希处理,以防网站被黑客攻击并且信息被泄露到互联网上。但是,如果我对密码进行哈希,我如何将其与API一起使用,这需要一个电子邮件地址&要访问的密码?

我网站的用户密码是经过哈希处理的,它是我努力争取的API的密码。

我想要一个相对简单的解释如何解决这个问题,我已经阅读了一些看似与我的问题相似的帖子,但还没找到答案。我可以加密密码。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我怀疑您的用户密码是否已加密(至少我希望不会),因为这意味着它们可以被解密(这是BAD安全实践)。用户密码通常以单向方式散列(例如使用password_hash

但是,使用您的API密码,您可以以双向方式加密,而不是对其进行加密。在这种情况下,PHP会为您提供openssl_encryptopenssl_decrypt函数

答案 1 :(得分:0)

使用您未存储的用户密码加密密码。这样,密码永远不会被存储,只能在使用时在RAM中瞬态存储。

  1. 在创建用户时,使用password_hash保存用户哈希密码。

  2. 当用户需要保存第三方密码供以后使用时,请使用password_verify对用户进行身份验证,然后使用用户密码加密第三方密码并保存。请注意,服务器不会将密钥存储到加密的第三方密码。

  3. 当用户想要登录第三方网站时,他输入了密码,用password_verify密码验证了密码,第三方密码用密码解密后发送到第三方方。

  4. 注意:

    一个。用户密码不直接用作加密密钥,加密函数使用密钥派生函数(如PBKDF2)生成实际加密密钥。

    password_hash和加密密钥派生函数都必须具有较高的工作因子,通常约为100毫秒。

    另一个需要探索的途径是密码管理器使用的加密方案,或者找到一个可以使用的开源密码管理器实现 - 确保它经过了很好的审查。