我在ac#项目中使用自定义的MemberShipProvider,基于以下代码:http://www.asp.net/learn/videos/video-189.aspx由于某些原因我无法弄清楚,解密用户密码以验证登录的方法提供了额外的密码值前面有8个字符(例如:䝉惯尝㳪畕锬密码)。
我使用“加密”密码格式和UnEncodePassword方法包含在:
private string UnEncodePassword(string encodedPassword)
{
string password = encodedPassword;
password = Encoding.Unicode.GetString(DecryptPassword(Convert.FromBase64String(encodedPassword)));
return password;
}
谢谢!
答案 0 :(得分:6)
“䝉惯尝㳪畕锬”是salt? (更新)
在服务器上,在web.config或其他内容中,您有一个salt值,例如“milkshake”。当用户提供类似“TheYard”的密码时,您需要添加盐并加密“milkshakeTheYard”。当他们登录时,您将盐添加到他们的请求中并将其与加密的字符串进行比较。
那么盐有什么意义呢?如果加密密码落入坏人之手,“TheYard”只有7个字符,很容易在Rainbow Table上查找。通过添加盐,可以使这个过程更加困难。
盐本身提供的安全性很小,但结合使用可以提供一个容易实现的额外层。
答案 1 :(得分:4)
您应该无法解密密码。您应该加密用户输入的密码并将其与存储的加密密码进行比较。密码恢复应生成随机的一次性密码,并强制用户在第一次使用时更改密码。
答案 2 :(得分:2)
private string UnEncodePassword(string encodedPassword)
{
string password = encodedPassword;
byte[] bytesIn = Convert.FromBase64String(encodedPassword);
byte[] bytesRet = DecryptPassword(bytesIn);
password = System.Text.Encoding.Unicode.GetString(bytesRet, 16, bytesRet.Length - 16);
return password;
}
谢谢伊恩给我关于盐的线索!