首选的密码存储方法是在数据库中存储密码。

13 浏览
0 Comments

首选的密码存储方法是在数据库中存储密码。

在数据库中,您更喜欢使用哪种方法/数据类型来存储密码(最好是SQL Server 2005)?在我们的几个应用程序中,我一直使用的方法是首先使用.NET加密库,然后将其存储为二进制(16)在数据库中。这是首选方法吗?还是我应该使用不同的数据类型或分配更多的空间超过16?

0
0 Comments

在数据库中存储密码是一个常见的需求,但是如何安全地存储密码一直是一个问题。下面的讨论主要是关于在数据库中存储密码的首选方法。

问题的出现是因为密码是敏感信息,如果以明文形式存储在数据库中,一旦数据库泄漏,攻击者将能够轻松地获取用户的密码。因此,需要找到一种方法来保护密码的安全性。

一种解决方法是使用加密算法来存储密码。通过将密码进行加密,即使数据库被攻击者访问,他们也无法直接获得用户的密码。然而,简单地将密码进行加密并存储在数据库中仍然不够安全。

为了进一步增加密码的安全性,可以使用盐(Salt)来增加密码的复杂度。盐是一个随机字符串,与密码一起进行加密。使用盐的好处是,即使两个用户的密码相同,加密后的结果也是不同的,从而增加了破解密码的难度。

在数据库中存储密码的首选方法是将加密后的密码作为字符串存储,并使用Base64编码。这样可以确保密码在存储过程中不会丢失或损坏。此外,根据加密算法和密码强度的不同,需要为存储密码分配足够的空间。

总结起来,为了安全地存储密码,可以使用加密算法对密码进行加密,并使用盐来增加密码的复杂度。将加密后的密码以字符串形式存储,并使用Base64编码,可以确保密码在存储过程中不会丢失或损坏。这是在数据库中存储密码的首选方法。

0
0 Comments

密码存储在数据库中是一个重要的安全问题。许多网站和应用程序都需要用户创建账号并设置密码,这些密码需要被存储在数据库中以供验证用户身份时使用。然而,直接将密码明文存储在数据库中是非常不安全的做法,因为一旦数据库被黑客攻破,所有用户密码都将暴露。

为了解决这个问题,有一种被广泛接受的方法:将密码的哈希值存储在数据库中,而不是明文密码。哈希函数是一种将任意长度的输入转换为固定长度输出的算法。当用户创建账号并设置密码时,服务器会将密码进行哈希处理,然后将哈希值存储在数据库中。当用户登录时,服务器会对输入的密码进行哈希处理,并与数据库中存储的哈希值进行比较,从而验证用户身份。

然而,仅仅使用哈希函数存储密码仍然存在安全风险。因为黑客可以使用彩虹表等预先计算好的哈希值进行破解,因此为了增加密码的安全性,我们需要给密码添加“盐”。

盐是一个随机的字符串,它被添加到密码之前或之后,然后进行哈希处理。这样一来,即使两个用户设置了相同的密码,由于使用了不同的盐,其哈希值也会不同。这样一来,即使黑客获得了哈希值,也无法通过简单地对比哈希值来得知两个用户使用了相同的密码。

以下是使用Python语言实现的例子:

import hashlib
import os
def hash_password(password):
    salt = os.urandom(16)  # 生成16字节的随机盐
    password_bytes = password.encode('utf-8')
    hashed_password = hashlib.pbkdf2_hmac('sha256', password_bytes, salt, 100000)
    return salt + hashed_password
def verify_password(password, hashed_password):
    salt = hashed_password[:16]  # 从哈希值中获取盐
    password_bytes = password.encode('utf-8')
    new_hashed_password = hashlib.pbkdf2_hmac('sha256', password_bytes, salt, 100000)
    return new_hashed_password == hashed_password[16:]
# 示例用法
password = "mypassword"
hashed_password = hash_password(password)
print(hashed_password)
print(verify_password(password, hashed_password))

在上述示例中,`hash_password`函数接收用户密码作为输入,并使用`os.urandom`生成一个随机的16字节盐。然后,将密码和盐拼接在一起,使用`hashlib.pbkdf2_hmac`函数进行哈希处理,迭代100000次,最终返回哈希值。

`verify_password`函数接收用户输入的密码和从数据库中取出的哈希值作为输入,从哈希值中提取出盐,并使用相同的哈希算法对用户输入的密码和盐进行哈希处理。最后,将新的哈希值与数据库中的哈希值进行比较,如果相等则验证成功,密码正确。

通过以上方法,在存储密码时,我们可以更好地保护用户的账号安全,即使数据库被黑客攻破,用户的密码也不会轻易泄露。同时,添加盐也增加了黑客破解密码的难度,提高了密码的安全性。

0
0 Comments

在处理数据库中存储密码的问题上,出现了以下原因:

1. 避免在任何地方存储原始密码数据,因为这样做太危险了。这使得密码的恢复变得不可能,但是当用户忘记或丢失密码时,可以通过一些检查来创建一个新密码。

2. 使用密码的散列值与用户传入的密码的散列值进行比较,而不是存储密码本身。

针对这些问题,有以下解决方法:

1. 在存储密码时,使用密码的散列值代替原始密码,并进行盐值加密。这样可以增加密码的安全性。

2. 使用密码加密库,如.net加密库或jbcrypt(适用于Java),来生成密码的散列值,并将其存储在数据库中。通过将用户输入的密码进行散列,然后与存储的散列值进行比较,来验证密码的正确性。

3. 在进行盐值加密时,使用全局盐值和用户特定的盐值,以增加密码破解的难度和成本。

4. 盐值应该是随机的,并具有足够的熵和用户特定性。如果未改变盐值的方法,那么应该进行改进,以确保盐值的随机性和安全性。

5. 使用适当的散列算法和格式来存储密码的散列值,以便在数据库中进行存储和比较。

总结起来,为了保护密码的安全性,在数据库中存储密码时,应该使用盐值加密和散列算法来代替原始密码,并采取适当的方法来生成和比较密码的散列值。这样可以增加密码的安全性,并减少密码泄露的风险。

0