随着我继续构建越来越多的网站和Web应用程序,我经常被要求以一种方式存储用户的密码,如果/当用户遇到问题时可以检索它们(要么通过电子邮件发送忘记的密码链接,请通过当我能够对抗这种做法时,我会做很多"额外"编程,以便在不存储实际密码的情况下进行密码重置和管理协助.
当我无法抗争(或无法获胜)时,我总是以某种方式对密码进行编码,以至于它至少不会以明文形式存储在数据库中 - 尽管我知道如果我的数据库被黑客攻击破坏密码的罪魁祸首并不需要太多,所以这让我感到不舒服.
在一个完美的世界里,人们经常更新密码,而不是在许多不同的网站上复制密码 - 不幸的是,我知道许多人拥有相同的工作/家庭/电子邮件/银行密码,甚至在需要帮助时自由地给我.如果我的数据库安全程序由于某种原因失败,我不想成为他们的财务终结负责人.
在道德和道德上,我觉得有责任保护一些用户的生活,即使他们以较少的尊重对待他们.我确信有许多途径可以用来腌制哈希和不同的编码选项,但是当你必须存储它们时,是否有一个"最佳实践"?在几乎所有情况下,我都使用PHP和MySQL,如果这对我应该处理细节的方式有任何不同.
附加信息Bounty
我想澄清一点,我知道这不是你想要做的事情,在大多数情况下拒绝这样做是最好的.但是,我并不是在寻找关于采取这种方法的优点的演讲我正在寻找采取这种方法时采取的最佳步骤.
在下面的一个注释中,我指出,当人们被要求执行安全的密码恢复程序时,主要针对老年人,智障人士或非常年轻人的网站可能会让人感到困惑.虽然在这些情况下我们可能会发现它简单而平凡,但有些用户需要额外的帮助,要么让服务技术人员帮助他们进入系统,要么将其直接通过电子邮件发送/显示给他们.
在这样的系统中,如果用户没有获得这种级别的访问协助,那么来自这些人口统计数据的流失率可能会阻碍应用程序,因此请记住这样的设置.
谢谢大家
这是一个有趣的问题,有很多争论,我很喜欢它.最后,我选择了一个保留密码安全性的答案(我不必保留纯文本或可恢复的密码),但也使我指定的用户群可以登录到系统而没有我从中找到的主要缺点正常的密码恢复.
由于不同的原因,我一直有大约5个答案,但我必须选择最好的答案 - 所有其他答案都是+1.感谢大家!
此外,感谢Stack社区中的每个人都投票赞成这个问题和/或将其标记为最喜欢的.我以100票赞成票作为赞美,并希望这次讨论能够帮助其他与我有同样关切的人.
我有点新玩框架和密码哈希.我试图找到一些哈希密码的解决方案,我找到了BCrypt.你认为这对哈希密码是否足够好.如果它很好,我怎样才能让它在Play框架中运行?(我正在使用游戏2.1.3)谢谢!
在.NET中,我们有SecureString类,在你尝试使用它之前一切都很好,因为(例如)散列字符串,你需要明文.在编写一个将散列SecureString的函数时,我已经开始了,给定一个带有字节数组并输出字节数组的散列函数.
private static byte[] HashSecureString(SecureString ss, Func<byte[], byte[]> hash)
{
    // Convert the SecureString to a BSTR
    IntPtr bstr = Marshal.SecureStringToBSTR(ss);
    // BSTR contains the length of the string in bytes in an
    // Int32 stored in the 4 bytes prior to the BSTR pointer
    int length = Marshal.ReadInt32(bstr, -4);
    // Allocate a byte array to copy the string into
    byte[] bytes = new byte[length];
    // Copy the BSTR to the byte array
    Marshal.Copy(bstr, bytes, 0, length);
    // Immediately destroy …我想在下面提到的springApplicationContext.xml中保留编码密码
有没有办法实现这个目标?
目前我已使用property-placeholder配置了所有属性,如下所示,但原始密码仍在我的database.properties中打开
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <beans:property name="driverClassName"><beans:value>${db.driverClassName}</beans:value></beans:property>
        <beans:property name="url"><beans:value>${db.url}</beans:value></beans:property>
        <beans:property name="username"><beans:value>${db.username}</beans:value></beans:property>
        <beans:property name="password"><beans:value>${db.password}</beans:value></beans:property>
</beans:bean>
但实际值存在于我的 database.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.username=root
db.password=root
我想要下面的东西:
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <beans:property name="driverClassName"><beans:value>${db.driverClassName}</beans:value></beans:property>
        <beans:property name="url"><beans:value>${db.url}</beans:value></beans:property>
        <beans:property name="username"><beans:value>${db.username}</beans:value></beans:property>
        <beans:property name="password"><beans:value>${db.password}</beans:value></beans:property>
</beans:bean>
但是密码属性值应该是我的编目格式 database.properties
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/myDB
db.username=root
db.password=3g6n72ef8x (using any encription method).
我的dataSource在进行新的数据库连接之前在内部解密密码.
非常感谢任何帮助/建议.
spring hibernate datasource password-encryption apache-commons-dbcp
我正在localhost上运行php版本5.4.16,而我正在开发我的网站.我想用password_hash(),但我一直收到这个错误:
致命错误:在第123行的/dir/to/file.php中调用未定义的函数password_hash()
为什么会这样?
谢谢!
php password-hash password-encryption undefined-function php-password-hash
例如,命令:
openssl enc -aes-256-cbc -a -in test.txt -k pinkrhino -nosalt -p -out openssl_output.txt
输出如下:
key = 33D890D33F91D52FC9B405A0DDA65336C3C4B557A3D79FE69AB674BE82C5C3D2
iv  = 677C95C475C0E057B739750748608A49
这个密钥是如何生成的?(作为答案的C代码太棒了要求:))另外,iv是如何生成的?
对我来说看起来像某种十六进制.
在烧瓶中,
当我尝试werkzeug.security.generate_password_hash("Same password")多次运行时,每次输出都不同?
我究竟做错了什么.为什么不恒定?
我猜它与设置盐有关?
可能重复:
PHP密码的安全散列和盐
我正在制作一个在MySQL数据库中存储用户凭据(电子邮件,用户名和密码)的系统,并且看到使用加密,腌制和加密类型的观点存在冲突.
你会推荐哪些最好的方法?在MD5或SHA1中编码?腌制还是不腌制?只加密密码或所有3个元素?
mysql database encryption database-design password-encryption
在我的网站中,我用来md5在我的数据库(和存储会话用户)中加密密码用户
$pswUser = md5($_POST["password"]);
但我刚刚被告知这种加密方式已经过时了
我做了一些研究,以了解如何做到这一点,但大多数帖子可以追溯到两三年前.那么2017年加密密码的最佳方法是什么?
谢谢
不是重复的讨论...... PHP密码的安全散列和盐 => 2009 ...