Sql 如何在数据库中存储需要以明文恢复的密码?

Sql 如何在数据库中存储需要以明文恢复的密码?,sql,security,password-protection,Sql,Security,Password Protection,您好,我正在开发一个PHP网站,该网站与一个三方解决方案集成,我必须注册API凭据以生成请求的令牌。 我已经知道在DB中存储密码最安全的方法是获取哈希或加密密码,但在这种情况下,我需要明文密码来生成令牌。 如何在数据库或配置文件中安全地存储此密码? 如果我必须使用加密功能,如何存储salt来恢复密码? 主要问题是我需要以明文形式恢复密码,但如果我的数据库遭到破坏,攻击者将无法恢复密码。加密密码,不要散列它 当你散列一个密码时,你将永远失去这个密码,你将得到一个密码本身的“投影”,它不允许返回并生

您好,我正在开发一个PHP网站,该网站与一个三方解决方案集成,我必须注册API凭据以生成请求的令牌。

我已经知道在DB中存储密码最安全的方法是获取哈希或加密密码,但在这种情况下,我需要明文密码来生成令牌。

如何在数据库或配置文件中安全地存储此密码?
如果我必须使用加密功能,如何存储salt来恢复密码?


主要问题是我需要以明文形式恢复密码,但如果我的数据库遭到破坏,攻击者将无法恢复密码。加密密码,不要散列它

当你散列一个密码时,你将永远失去这个密码,你将得到一个密码本身的“投影”,它不允许返回并生成原始密码。哈希通常是最安全的身份验证选项,因为任何人都无法复制原始密码。但是您不能散列它,因为您需要在某个时候返回密码

因此,请对其进行加密。有几个加密等级,从最基本的到最强的。我不知道你想要加密有多安全。以下是典型选项的简单(非全面)列表:

1。编码

编码不是加密。当我们对一些数据进行编码时,我们用其他字符替换字符。想想朱利叶斯·凯撒(Julius Caesar)使用的2000年历史的ROT-13(是吗?)。
A
变成
H
B
变成
T
,等等。无论如何,这不是加密,只是一个简单的转换,它会愚弄一个孩子,或者一个没有技术背景的人。其他最典型的编码包括Base-64和简单十六进制

2。弱加密

弱加密包括所有不使用salt的对称加密,以及内部或短密钥(小于256位)。典型的情况是使用简单的密码

3。中等加密

这包括使用较大密码(或位长度为256或更长的密钥)的对称加密、satting,但使用内部密码/密钥。这是非常有用的,我已经多次采用这种策略。salt存储为编码值的前16个字节。取消加密时,salt与编码值分开(它总是16字节)

4。强加密

本质上是中级加密,但添加了密钥管理解决方案。密钥不再是固定的,也不再存储在应用程序本身中,而是在需要时从外部安全地恢复。密钥由外部进程管理,并定期更改。这需要在应用程序中进行一些额外的处理

底线


对于您的情况,我会使用选项3介质加密,除非您有充分的理由尝试选项4。对我来说#4太过分了。

加密密码,不要散列它

当你散列一个密码时,你将永远失去这个密码,你将得到一个密码本身的“投影”,它不允许返回并生成原始密码。哈希通常是最安全的身份验证选项,因为任何人都无法复制原始密码。但是您不能散列它,因为您需要在某个时候返回密码

因此,请对其进行加密。有几个加密等级,从最基本的到最强的。我不知道你想要加密有多安全。以下是典型选项的简单(非全面)列表:

1。编码

编码不是加密。当我们对一些数据进行编码时,我们用其他字符替换字符。想想朱利叶斯·凯撒(Julius Caesar)使用的2000年历史的ROT-13(是吗?)。
A
变成
H
B
变成
T
,等等。无论如何,这不是加密,只是一个简单的转换,它会愚弄一个孩子,或者一个没有技术背景的人。其他最典型的编码包括Base-64和简单十六进制

2。弱加密

弱加密包括所有不使用salt的对称加密,以及内部或短密钥(小于256位)。典型的情况是使用简单的密码

3。中等加密

这包括使用较大密码(或位长度为256或更长的密钥)的对称加密、satting,但使用内部密码/密钥。这是非常有用的,我已经多次采用这种策略。salt存储为编码值的前16个字节。取消加密时,salt与编码值分开(它总是16字节)

4。强加密

本质上是中级加密,但添加了密钥管理解决方案。密钥不再是固定的,也不再存储在应用程序本身中,而是在需要时从外部安全地恢复。密钥由外部进程管理,并定期更改。这需要在应用程序中进行一些额外的处理

底线


对于您的情况,我会使用选项3介质加密,除非您有充分的理由尝试选项4。对我来说,4是过分了。

首先要确保你需要密码,因为如果你有权访问用户密码,那么用户和你都有严重的责任

保存密码会带来很大的安全问题,需要大量的保护措施

需要对密码进行加密以及随机逐密码加密。加密的问题是,密钥必须可用,并且获得管理员权限的攻击者将获得加密密钥和加密密码,如果两者都是