Node.js密码加密与Asp.Net相同

时间:2014-04-04 09:20:25

标签: asp.net sql-server node.js encryption

我在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模块进行数据库通信。请帮我解决这个问题。谢谢!

1 个答案:

答案 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。 (我没有足够的经验为你提供优雅的解决方案)