3

暗号化/復号化は初めてです。暗号化されて44文字になる入力文字列を復号化しようとしています。

これは私がこれまでに持っているものですが、「TransformFinalBlock」関数を実行しようとすると「不良データ」を取得し続けます。

public static String Decrypt(String input)
    {
        try{
            byte[] inputArray = Convert.FromBase64String(input);
            TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
            tripleDES.KeySize = 128;
            tripleDES.Key = UTF8Encoding.UTF8.GetBytes("0123456789ABCDEF");
            tripleDES.IV = UTF8Encoding.UTF8.GetBytes("ABCDEFGH");
            tripleDES.Mode = CipherMode.ECB;
            tripleDES.Padding = PaddingMode.PKCS7;
            ICryptoTransform transform = tripleDES.CreateDecryptor();
            byte[] resultArray = transform.TransformFinalBlock(inputArray, 0, inputArray.Length);
            tripleDES.Clear();

            return UTF8Encoding.UTF8.GetString(resultArray);
        }
        catch(Exception except){
            Debug.WriteLine(except + "\n\n" + except.StackTrace);
            return null;
        }
    }
4

2 に答える 2

5

IVを使用する場合は、を使用する必要がありますCipherMode.CBC。ECBはIVを使用しません。

さらに、データはまったく埋め込まれず、正確に32バイト含まれます。復号化をテストするには、最初にパディングなしで試すのが一般的です。そうすれば、結果の平文を見て、どのパディングが使用されているかを目で判断できます。

プレーンデータはここに印刷するにはあまりにも角質なので、私はしません。

于 2012-05-17T00:40:07.157 に答える
3

非常によく似た問題があり、PaddingModeNoneに変更して修正しました

私のCipherModeECB(電子コードブック)です。

于 2015-07-29T20:35:13.713 に答える