可能重复:
是否可以解密md5哈希?
我使用密码存储在数据库中md5,并且想知道是否有办法扭转哈希,以便在忘记密码时将用户的密码通过电子邮件发送给他.
如果这不是最合适的方法,处理丢失密码的适当方法是什么?
可能重复:
PHP密码的安全散列和盐
我正在制作一个在MySQL数据库中存储用户凭据(电子邮件,用户名和密码)的系统,并且看到使用加密,腌制和加密类型的观点存在冲突.
你会推荐哪些最好的方法?在MD5或SHA1中编码?腌制还是不腌制?只加密密码或所有3个元素?
mysql database encryption database-design password-encryption
底线是创建自定义FTP身份验证提供程序.为了做到这一点,必须从IFtpAuthenticationProvider接口继承,然后在GAC中注册该程序集.之后,需要在IIS的FTP设置中注册程序集.
为了实现这一目标,我必须使用数据库,该数据库将我的用户信息保存在我们之前开发的自定义成员资格和角色提供程序的数据库中.所以,这意味着我必须使用本地类库app.config文件并阅读它ConfigurationManager.OpenMappedExeConfiguration().我从那里读取连接字符串,我甚至能够动态地将它提供给Linq-To-Sql类.没问题.
接下来,我尝试创建一个继承自SqlMembershipProvider的类,以便我可以使用它自己的系统来解密用户的密码.但是,问题是它必须machineKey从配置中读取值.您可以为SqlMembershipProvider提供自定义配置的唯一方法是使用它的Initialize方法(无论如何我们都不打算在我们的代码中使用它).但无论如何我试过并失败了.我已经能够提供自定义成员资格设置,但不能提供machineKey设置.
所以,我决定变得激进.我说:我有decryptionKey来自machineKey所以我会尝试手动解密密码.
到目前为止,我已尝试使用RijndaelManaged:
private string UnEncodePassword(string encodedPassword, string secretKey)
{
string password = encodedPassword;
var keyBytes = new byte[16];
var secretKeyBytes = Encoding.UTF8.GetBytes(secretKey);
Array.Copy(secretKeyBytes, keyBytes, Math.Min(keyBytes.Length, secretKeyBytes.Length));
RijndaelManaged rm = new RijndaelManaged
{
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7,
KeySize = 128,
BlockSize = 128,
Key = keyBytes,
IV = keyBytes
}; …Run Code Online (Sandbox Code Playgroud) 我尝试使用Rfc2898DeriveBytes在C#中散列我的密码,方法是将用户名作为其salt值.
public string HashPassword(string HashedUsernameSalt, string Password)
{
Rfc2898DeriveBytes HashedPass = new Rfc2898DeriveBytes(Password,
System.Text.Encoding.Default.GetBytes(HashedUsernameSalt), 10000);
return Convert.ToBase64String(Hasher.GetBytes(25));
}
Run Code Online (Sandbox Code Playgroud)
上面的方法给了我一些哈希值.我的问题是
是否可以取回我的密码以显示用户是否忘记了密码?或者我需要在这里实现其他一些概念,如加密和解密吗?但我听说哈希比加密更好.
谢谢!