0

web.configの情報などの機密情報を保護するために.Netを介してMVCアプリケーションに取り組んでいますが、トリプルDESを使用して情報を暗号化および復号化する2つの関数がありますが、これは初めてで、到達することに成功しました友人の助けを借りてここまで、ここでいくつか質問をします。

私が現在立ち往生しているポイントは、暗号化された文字列の最後にTDES IV(初期化ベクトル)を追加するにはどうすればよいですか?また、復号化中にそれを再度取得するにはどうすればよいですか?つまり、暗号化された情報で、ここからIV(初期化ベクトル)の星をどのように識別しますか?

暗号化された文字列でTDESIV(初期化ベクトル)を追加および取得する方法から、ECBはIVをサポートしていないため、ECBではなくCBCモードに切り替えるようにアドバイスされました。

しかし、どうすればCBCに切り替えることができますか?

私はこれに関して本当に助けが必要です、maがこの問題にぶつかって、それに対する解決策を見つけることができないのは長い間です。助けてください。

public static string Encrypt(string Message)
{
    byte[] iv;
    byte[] Results;
    System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
    MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
    byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
    TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
    TDESAlgorithm.Key = TDESKey;
    TDESAlgorithm.Mode = CipherMode.ECB;
    TDESAlgorithm.Padding = PaddingMode.PKCS7;
    // Capture the randomly generated IV
    iv = TDESAlgorithm.IV;
    byte[] DataToEncrypt = UTF8.GetBytes(Message);
    try
    {
        ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
        Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
        //var lnght=Results.GetLength(0);
        //System.Buffer.BlockCopy(iv, 0, Results, lnght + 1, iv.Length()); //HOW?
    }
    finally
    {
        TDESAlgorithm.Clear();
        HashProvider.Clear();
    }
    return Convert.ToBase64String(Results);
    //return Encoding.UTF8.GetString(Results);
}

public static string Decrypt(string Message)
{
    byte[] Results;
    System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
    MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
    byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(GetSHA256String()));
    TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
    TDESAlgorithm.Key = TDESKey;
    // Apply the same IV used during encryption
    //TDESAlgorithm.IV = iv;  // HOW?
    TDESAlgorithm.Mode = CipherMode.ECB;
    TDESAlgorithm.Padding = PaddingMode.PKCS7;
    try
    {
        byte[] DataToDecrypt = Convert.FromBase64String(Message);
        //byte[] DataToDecrypt = UTF8.GetBytes(Message);
        //byte[] DataToDecrypt = Encoding.UTF8.GetBytes(Message);
        ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor();
        Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); // << ERROR is here.
    }
    finally
    {
        TDESAlgorithm.Clear();
        HashProvider.Clear();
    }
    return UTF8.GetString(Results);
}

…
…

任意のガイドライン、リンク、またはをpiece of codeいただければ幸いです。ありがとうございました。

4

1 に答える 1

4

TDESAlgorithm.Mode = CipherMode.CBC;CBCに変更するには、暗号化と復号化の両方について、コードを修正して読み取ります。

DESは64ビットのブロック暗号であるため、64ビットのIV、8バイトが必要になります。暗号的に安全なRNGを使用しRNGCryptoServiceProviderます。C#はIVを生成し、それをパラメーターとして暗号化メソッドに渡す必要があります。ここでは、C#のドキュメントが役立ちます。

プレーンテキストを暗号化したら、メッセージの前にIVを追加して、すべてを送信します。

復号化するときは、着信メッセージの最初の8バイトを抽出してIVとして使用します。メッセージの残りの部分は暗号文を形成します。

于 2012-07-26T13:47:11.677 に答える