我在asp.net中创建了一个wesite并使用ms-sql数据库来保存记录。现在想在node.js应用程序中转换它。并希望使用相同的SQL数据库。在asp.net应用程序中,我已加密注册用户的密码。下面是代码。
public static string CreateHash(string unHashed)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.ASCII.GetBytes(unHashed);
data = x.ComputeHash(data);
return System.Text.Encoding.ASCII.GetString(data);
}
public static bool MatchHash(string HashData, string HashUser)
{
HashUser = CreateHash(HashUser);
if (HashUser == HashData)
return true;
else
return false;
}
现在的问题是我如何在node.js中使用相同的加密。因此,当节点应用程序准备好时,旧用户也可以进行登录。只有当节点应用程序也使用我在asp.net中使用的相同加密时才有可能。
对于节点,我创建了所有环境并使用mssql模块进行数据库通信。请帮我解决这个问题。谢谢!
答案 0 :(得分:0)
首先,如果您认真对待安全问题,则不再使用MD5。
根据您的评论和代码,我担心数据会丢失'在最初的ASP.net代码中。 让我们再看一下CreateHash函数,我添加了评论:
public static string CreateHash(string unHashed)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
// Convert unHashed string to bytes using ASCII coding
byte[] data = System.Text.Encoding.ASCII.GetBytes(unHashed);
// Compute MD5 hash from bytes
data = x.ComputeHash(data);
// Decode MD5 resulting bytes as ASCII
return System.Text.Encoding.ASCII.GetString(data);
}
最后一行让我感到困惑,它正在解码从MD5函数接收的字节,好像它们是ASCII,但这是不正确的假设。您在评论中提供的结果编码字符串包含许多"?' s"。
下一个node.js代码将执行类似操作,除了使用十六进制而不是ascii编码字符串:
var crypto = require('crypto')
function createHash(data) {
return crypto.createHash('md5').update(data, 'ascii').digest('hex')
}
将"字节模拟为ascii"你可以试试.digest(' binary')而不是hex。如果它没有达到您的期望,那么您必须进行单独的转换'从十六进制到ascii。 (我没有足够的经验为你提供优雅的解决方案)