The*_*TXI 76 database sql-server security encryption passwords
在数据库中存储密码的首选方法/数据类型是什么(最好是SQL Server 2005).我在几个应用程序中一直使用的方法是首先使用.NET加密库,然后将它们作为二进制文件存储在数据库中(16).这是首选方法还是我应该使用不同的数据类型或分配比16更多的空间?
Qui*_*son 82
我将密码的salted哈希等价物存储在数据库中,而不是密码本身,然后始终将哈希值与生成的用户传入的哈希值进行比较.
将文字密码数据存储在任何地方都太危险了.这使得恢复成为不可能,但是当有人忘记或丢失密码时,您可以执行一些检查并创建新密码.
通过这些措施,您的用户密码将得到相当好的保护:
由于散列函数的结果是0到255范围内的一系列字节(或-128到127,取决于您的8位数据类型的有符号关系),因此将其存储为原始二进制字段最有意义,因为它是最紧凑的表示,不需要额外的编码和解码步骤.
某些数据库或驱动程序对二进制数据类型没有很好的支持,或者有时开发人员对它们不熟悉并感觉不舒服.在这种情况下,使用像Base-64或Base-85这样的二进制到文本编码,并将结果文本存储在字符字段中是可以接受的.
必要字段的大小由您使用的哈希函数确定.MD5总是输出16个字节,SHA-1总是输出20个字节.一旦选择了哈希函数,您通常会坚持使用它,因为更改需要重置所有现有密码.因此,使用可变大小的字段并不能为您带来任何好处.
关于执行散列的"最佳"方法,我试图提供关于该主题的其他SO问题的许多答案:
| 归档时间: |
|
| 查看次数: |
11725 次 |
| 最近记录: |