0

私はパスワードの復号化に取り組んでおり、このエラーに固執しました Base-64 char配列の無効な長さ.私はあまりにも多くのことを試みていますが、すべて無駄に私のプロジェクトはこのエラーのために立ち往生しています.Hereは私のコードです.

public string PasswordDecrypt(string sQueryString)
    {

        byte[] buffer;
        TripleDESCryptoServiceProvider loCryptoClass = new TripleDESCryptoServiceProvider();
        MD5CryptoServiceProvider loCryptoProvider = new MD5CryptoServiceProvider();


        try
        {
            string base64String;
            char[] base64CharArray;
            base64CharArray = new char[sQueryString.Length];
            base64String = new string(base64CharArray);
            Convert.FromBase64String(sQueryString);
            buffer = Convert.FromBase64String(sQueryString);
            loCryptoClass.Key = loCryptoProvider.ComputeHash(ASCIIEncoding.ASCII.GetBytes(sQueryString.Replace("","+")));
            loCryptoClass.IV = lbtVector;
            return ASCIIEncoding.ASCII.GetString(loCryptoClass.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length));
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            loCryptoClass.Clear();
            loCryptoProvider.Clear();
            loCryptoClass = null;
            loCryptoProvider = null;
        }

    }
4

1 に答える 1

1

パスワードは絶対に復号化 (または暗号化) しないでください。資格情報ストアを作成/更新するときにパスワードのハッシュ (できればソルト化) を作成し、そのハッシュをユーザーが認証を試みるときに入力したものから派生したハッシュと比較する必要があります。

これは私が過去に使用した実装です (いくつかの障害がありますが、重要ではないアプリで動作します):

public class HashProvider
{
    /// <summary>
    /// Computes the SHA1 hash from the given string.
    /// </summary>
    /// <param name="stringToHash">The string to hash.</param>
    /// <returns></returns>
    public static string GetSHA1Hash(string stringToHash)
    {
        var data = Encoding.UTF8.GetBytes(stringToHash);
        var hashData = new SHA1CryptoServiceProvider().ComputeHash(data);

        return String.Concat(hashData.Select(b => b.ToString("X2")));
    }


    /// <summary>
    /// Computes the SHA1 hash from the given string, and then encodes the hash as a Base64 string.
    /// </summary>
    /// <param name="stringToHash">The string to hash.</param>
    /// <returns></returns>
    public static string GetSHA1toBase64Hash(string stringToHash)
    {
        var data = Encoding.UTF8.GetBytes(stringToHash);
        var hashData = new SHA1CryptoServiceProvider().ComputeHash(data);

        return Convert.ToBase64String(hashData);
    }
}
于 2013-05-25T08:31:39.283 に答える