Exemplo n.º 1
0
        /// <summary>パスワードをDB保存する際には塩味パスワードとして保存する。</summary>
        /// <param name="rawPasswd">ユーザが入力した生のパスワード</param>
        /// <param name="eha">ハッシュ・アルゴリズム列挙型</param>
        /// <param name="saltLength">ソルトの文字列長</param>
        /// <returns>塩味パスワード</returns>
        public static string GetSaltedPasswd(string rawPasswd, EnumHashAlgorithm eha, int saltLength)
        {
            // ランダム・ソルト文字列を生成(区切り記号は含まなくても良い)
            string salt = Membership.GeneratePassword(saltLength, 0);

            // 塩味パスワード(文字列)を生成して返す。
            return(salt + GetHash.GetHashString(salt + rawPasswd, eha));

            // バイト配列仕様は、フィールドが文字列の可能性が高いので辞めた。
        }
Exemplo n.º 2
0
        /// <summary>
        /// Password entered by the userをDB保存する際、
        /// Salted and hashed passwordとして保存する必要がある。
        /// </summary>
        /// <param name="rawPassword">>Password entered by the user.</param>
        /// <param name="eha">ハッシュ・アルゴリズム列挙型</param>
        /// <param name="saltLength">ソルトの文字列長</param>
        /// <param name="stretchCount">ストレッチ回数</param>
        /// <returns>Salted and hashed password.</returns>
        public static string GetSaltedPassword(string rawPassword, EnumHashAlgorithm eha, int saltLength, int stretchCount)
        {
            // ランダム・ソルト文字列を生成(区切り記号は含まなくても良い)
            string salt = GetPassword.Generate(saltLength, 0); //Membership.GeneratePassword(saltLength, 0);

            // Salted and hashed password(文字列)を生成して返す。
            return
                (CustomEncode.ToBase64String(CustomEncode.StringToByte(salt, CustomEncode.UTF_8))
                 + "." + CustomEncode.ToBase64String(CustomEncode.StringToByte(stretchCount.ToString(), CustomEncode.UTF_8))
                 + "." + CustomEncode.ToBase64String(CustomEncode.StringToByte(GetHash.GetHashString(salt + rawPassword, eha, stretchCount), CustomEncode.UTF_8)));
        }
Exemplo n.º 3
0
        /// <summary>パスワードを比較して認証する。</summary>
        /// <param name="rawPasswd">ユーザが入力した生のパスワード</param>
        /// <param name="saltedPasswd">塩味パスワード</param>
        /// <param name="eha">ハッシュ・アルゴリズム列挙型</param>
        /// <param name="saltLength">ソルトの文字列長</param>
        /// <returns>
        /// true:パスワードは一致した。
        /// false:パスワードは一致しない。
        /// </returns>
        public static bool EqualSaltedPasswd(string rawPasswd, string saltedPasswd, EnumHashAlgorithm eha, int saltLength)
        {
            // ソルト部分を取得
            string salt = saltedPasswd.Substring(0, saltLength);

            // 引数のsaltedPasswdと、rawPasswdから自作したsaltedPasswdを比較
            if (saltedPasswd == salt + GetHash.GetHashString(salt + rawPasswd, eha))
            {
                // 一致した。
                return(true);
            }
            else
            {
                // 一致しなかった。
                return(false);
            }
        }
Exemplo n.º 4
0
        /// <summary>パスワードを比較して認証する。</summary>
        /// <param name="rawPassword">Password entered by the user.</param>
        /// <param name="saltedPassword">Salted and hashed password.</param>
        /// <param name="eha">ハッシュ・アルゴリズム列挙型</param>
        /// <returns>
        /// true:パスワードは一致した。
        /// false:パスワードは一致しない。
        /// </returns>
        public static bool EqualSaltedPassword(string rawPassword, string saltedPassword, EnumHashAlgorithm eha)
        {
            // ソルト部分を取得
            string[] temp           = saltedPassword.Split('.');
            string   salt           = CustomEncode.ByteToString(CustomEncode.FromBase64String(temp[0]), CustomEncode.UTF_8);
            int      stretchCount   = int.Parse(CustomEncode.ByteToString(CustomEncode.FromBase64String(temp[1]), CustomEncode.UTF_8));
            string   hashedPassword = CustomEncode.ByteToString(CustomEncode.FromBase64String(temp[2]), CustomEncode.UTF_8);

            // 引数のsaltedPasswordと、rawPasswordから自作したsaltedPasswordを比較
            if (hashedPassword == GetHash.GetHashString(salt + rawPassword, eha, stretchCount))
            {
                // 一致した。
                return(true);
            }
            else
            {
                // 一致しなかった。
                return(false);
            }
        }
Exemplo n.º 5
0
 /// <summary>文字列のハッシュ値を計算して返す。</summary>
 /// <param name="sourceString">文字列</param>
 /// <param name="eha">ハッシュ・アルゴリズム列挙型</param>
 /// <returns>ハッシュ値(文字列)</returns>
 public static string GetHashString(string sourceString, EnumHashAlgorithm eha)
 {
     // overloadへ
     return(GetHash.GetHashString(sourceString, eha, 1));
 }