我需要在程序代码中验证asp.net数据库中的用户密码,发现在数据库中有一个aspnet_Membership_GetPasswordWithFormat存储过程。我用它返回了一个密码字符串,但是是经过加密过的,哪位高手知道它的加密算法?
解决方案 »
- 好心人帮我看一看,下段代码那出问题了,谢谢asp.net的
- Gridview中的问题各位帮忙初学者
- 请教select语句的写法
- PAYPAL接口谁做过
- 购物车 ....
- 输入字符串的格式不正确。 在线等 请帮忙
- 做一个像163添加附件的功能
- Linux2005系统用Ghost8.0备份不了,怎么办?!
- 水晶报表的问题,请帮忙,谢谢大家!!!
- 在线求助:为什么Request在ASPX中使用时正常,但在cs模块文件的类中使用时出错呢? 谢谢!!!
- 无法打开登录所请求的数据库 "test"。用户 'LJ\picnic' 登录失败。
- 我定义了一个<asp:button id="RegisterButton" runat="server" Text="按钮" onclick="ButtonClick" ></asp:button>,有什么办法让响应这个函数时不调用page_load函数
另外还有一个问题,只知道代码是不够的,还要取出数据库里另外2个字段PASSWORDSALT,PASSWORDFORMATPASSWORDSALT就是GenerateSalt()这个函数生成的key。
加密解密函数里边都要用到
internal string GenerateSalt()
{
byte[] buf = new byte[16];
(new RNGCryptoServiceProvider()).GetBytes(buf);
return Convert.ToBase64String(buf);
}
internal string EncodePassword(string pass, int passwordFormat, string salt)
{
if (passwordFormat == 0) // MembershipPasswordFormat.Clear
return pass; byte[] bIn = Encoding.Unicode.GetBytes(pass);
byte[] bSalt = Convert.FromBase64String(salt);
byte[] bAll = new byte[bSalt.Length + bIn.Length];
byte[] bRet = null; Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);
Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);
if (passwordFormat == 1)
{ // MembershipPasswordFormat.Hashed
HashAlgorithm s = HashAlgorithm.Create( Membership.HashAlgorithmType );
bRet = s.ComputeHash(bAll);
} else
{
bRet = EncryptPassword( bAll );
} return Convert.ToBase64String(bRet);
} internal string UnEncodePassword(string pass, int passwordFormat)
{
switch (passwordFormat)
{
case 0: // MembershipPasswordFormat.Clear:
return pass;
case 1: // MembershipPasswordFormat.Hashed:
throw new ProviderException(SR.GetString(SR.Provider_can_not_decode_hashed_password));
default:
byte[] bIn = Convert.FromBase64String(pass);
byte[] bRet = DecryptPassword( bIn );
if (bRet == null)
return null;
return Encoding.Unicode.GetString(bRet, 16, bRet.Length - 16);
}
}
}