我正在一个加载器/客户端工作,我的论坛用户将使用他们的myBB信息登录到我的应用程序。我知道在应用程序中使用数据库连接并不好。但是我也要将它们的id存储在数据库中,所以我需要连接到它。
但是,它们像这样存储密码:
$hashedpsw = md5(md5($salt).md5($plainpassword));
我尝试重新创建的密码看起来像这样:
string salt = "D4UFUd6U"; // get salt from db
string password = "test!";// get password from user
MD5 md5 = new MD5CryptoServiceProvider();
// Create md5 hash of salt
byte[] saltBytes = Encoding.Default.GetBytes(salt);
byte[] saltHashBytes = md5.ComputeHash(salt);
string saltHash = System.BitConverter.ToString(saltHashBytes);
// Create your md5(password + md5(salt)) hash
byte[] passwordBytes = Encoding.Default.GetBytes(password + saltHash);
byte[] passwordHashBytes = md5.ComputeHash(salt);
string passwordHash = BitConverter.ToString(passwordHashBytes);
但是我得到以下错误:
无法从'string'转换为'System.IO.Stream'
ComputeHash想要一个IO.Stream
或Byte[]
作为输入,并且正如错误指定的那样,不能从您的字符串隐式地转换为IO.Stream
。
下面是一个如何将字符串转换为流的例子(从这个答案中偷来的):
public Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
这会改变你的代码如下:
string salt = "D4UFUd6U"; // get salt from db
string password = "test!";// get password from user
MD5 md5 = new MD5CryptoServiceProvider();
// Create md5 hash of salt
byte[] saltBytes = Encoding.Default.GetBytes(salt);
byte[] saltHashBytes;
using( Stream saltStream = GenerateStreamFromString(salt))
{
salteHashBytes = md5.ComputeHash(saltStream);
}
string saltHash = System.BitConverter.ToString(saltHashBytes);
// Create your md5(password + md5(salt)) hash
byte[] passwordBytes = Encoding.Default.GetBytes(password + saltHash);
byte[] passwordHashBytes;
using( Stream saltStream = GenerateStreamFromString(salt))
{
passwordHashBytes = md5.ComputeHash(saltStream);
}
string passwordHash = BitConverter.ToString(passwordHashBytes);
您使用MD5CryptoServiceProvider
类使用md5
哈希算法进行加密。首先添加以下名称空间:
using System.Text;
using System.Security.Cryptography;
第二,试试这样一个函数:
public static string Encrypt(string content)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytes = Encoding.ASCII.GetBytes(content);
bytes = md5.ComputeHash(data);
string result = Encoding.ASCII.GetString(bytes);
return result;
}