如何使用带有盐的哈希密码在服务器上验证客户端?

时间:2016-01-24 15:47:37

标签: security passwords password-protection

我尝试实现身份验证算法。我现在的基本顺序是 以下内容:

enter image description here

现在我怀疑这是正确的做法。用我想要的盐 防止彩虹表,但从服务器请求盐将让 一个中间攻击的人获得盐,然后破解密码 使用盐的彩虹桌很容易。

解决此问题的唯一方法是https连接还是以某种方式实现 为了得到更多的保存?

1 个答案:

答案 0 :(得分:2)

  1. 永远不要存储密码,只需存储密码。
  2. Salt永远不会离开服务器,生成盐并将其保留为生成哈希的一部分。
  3. 使用种子来增加保护。种子可以是从某个预定义日期到用户使用该应用程序创建登录日期的秒数。
  4. C#代码示例:

    namespace ParkingTagPicker.ViewModels
    {
        public abstract class ViewModelBase : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected void RaisePropertyChanged(string propertyName)
            {
                var propertyChanged = this.PropertyChanged;
    
                if (propertyChanged != null)
                {
                    propertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
            protected bool SetProperty<T>(ref T backingField, T Value, Expression<Func<T>> propertyExpression)
            {
                var changed = !EqualityComparer<T>.Default.Equals(backingField, Value);
    
                if (changed)
                {
                    backingField = Value;
                    this.RaisePropertyChanged(ExtractPropertyName(propertyExpression));
                }
    
                return changed;
            }
    
            private static string ExtractPropertyName<T>(Expression<Func<T>> propertyExpression)
            {
                var memberExp = propertyExpression.Body as MemberExpression;
    
                if (memberExp == null)
                {
                    throw new ArgumentException("Expression must be a MemberExpression.", "propertyExpression");
                }
    
                return memberExp.Member.Name;
            }
    
    
        }
    }