MVC 3,其中加密用户的密码?(MVC 3 where to encrypt the user&#

2019-09-21 08:17发布

我有我使用来检查用户的密码登录时,这是在我的用户实体引用我自己的密码加密DLL。

现在,我已经创建了一个用户注册,其做工精细,除了密码没有加密的能力。

我的问题很简单,我应该把新用户的密码加密? 我不知道,因为我知道,用户的密码不应该以明文传输,所以我不知道在哪里最好的地方调用加密功能:

  • 用户实体(如加密DLL已用于验证)。
  • 用户储存库,其中用户保存方法是。
  • 用户控制器,其中用户创建视图控制。
  • 别的地方我还没有考虑过!

非常感谢

Answer 1:

首先,客户端 - 服务器的通信,我会建议你使用SSL的敏感信息(如密码)不以纯文本格式进行传输。

此后,它是常见的做法不是在任何地方保存密码(即使是加密的,但其中的哈希值。

你可以把散列函数密码属性的设置方法。 下面是一个例子:

public class Member
{
    private string _username;

    public string Username
    {
        get { return _username; }
        set { _username = value.ToLowerInvariant(); }
    }

    public string Passhash {get;set;}

    public void SetPassword(string password)
    {
        Passhash = Crypto.Hash(password);
    }

    public bool CheckPassword(string password)
    {
        return string.Equals(Passhash, Crypto.Hash(password));
    }
}

public static class Crypto
{
    public static string Hash(string value)
    {
        return Convert.ToBase64String(
            System.Security.Cryptography.SHA256.Create()
            .ComputeHash(Encoding.UTF8.GetBytes(value)));
    }
}

编辑:

克雷格斯顿茨指出,在这个例子中,哈希代码非常简单。 请参阅以下职位哈希密码更安全的方式: 用MD5或SHA-256 C#哈希密码



Answer 2:

在服务层的方法,这将是负责做两件事情:

  1. 打电话给你的加密层来散列密码(不加密的话)
  2. 打电话给你的用户库到用户实体与哈希密码持久化到数据库

当然,控制器动作会聊到服务层。



Answer 3:

不要做你自己的密码哈希,甚至不考虑加密密码。

使这个安全所付出的努力是巨大的。 使用现有的方法,根据公开的规范和算法。



Answer 4:

//ENCODE

public string base64Encode(string sData)
{
try
{
byte[] encData_byte = new byte[sData.Length];

encData_byte = System.Text.Encoding.UTF8.GetBytes(sData);

string encodedData = Convert.ToBase64String(encData_byte);

return encodedData;

}
catch(Exception ex)
{
throw new Exception("Error in base64Encode" + ex.Message);
}
}

//DECODE

public string base64Decode(string sData)
    {
        try
        {
            System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();

            System.Text.Decoder utf8Decode = encoder.GetDecoder();

            byte[] todecode_byte = Convert.FromBase64String(sData);

            int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);

            char[] decoded_char = new char[charCount];

            utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);

            string result = new String(decoded_char);

            return result;
        }
        catch (Exception ex)
        {
            throw new Exception("Error in base64Decode" + ex.Message);
        }
    }

How to call 

string encode= base64Encode(val);

string decode= base64Decode(val);


This is very helpful to decode and encode your string(password)


文章来源: MVC 3 where to encrypt the user's password?