1

次のコードを使用して、3-DESアルゴリズムを使用して文字列をキーで暗号化します。

private bool Encode(string input, out string output, byte[] k, bool isDOS7)
    {
        try
        {
            if (k.Length != 16)
            {
                throw new Exception("Wrong key size exception");
            }
            int length = input.Length % 8;
            if (length != 0)
            {
                length = 8 - length;
                for (int i = 0; i < length; i++)
                {
                    input += " ";

                }
            }
            TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();

            des.Mode = CipherMode.ECB;
            des.Padding = PaddingMode.Zeros;
            des.Key = k;
            ICryptoTransform ic = des.CreateEncryptor();



            byte[] bytePlainText = Encoding.Default.GetBytes(input);
            MemoryStream ms = new MemoryStream();
            CryptoStream cStream = new CryptoStream(ms,
                ic,
                CryptoStreamMode.Write);

            cStream.Write(bytePlainText, 0, bytePlainText.Length);
            cStream.FlushFinalBlock();
            byte[] cipherTextBytes = ms.ToArray();
            cStream.Close();
            ms.Close();
            output = Encoding.Default.GetString(cipherTextBytes);

        }
        catch (ArgumentException e)
        {
            output = e.Message;
            //Log.Instance.WriteToEvent("Problem encoding, terminalID= "+objTerminalSecurity.TerminalID+" ,Error" + output, "Security", EventLogEntryType.Error);
            return false;
        }
        return true;
    }

出力パラメータをそのままWCFhttp-bindingWebサービスに送信すると、実際にエンコードされた文字列が異なって見えることに気付きました。\tと\nがいくつかあるように見えますが、文字はほぼ同じです。

何が起こっているのですか、なぜサーバーは異なるエンコードされた文字列を取得するのですか?

4

1 に答える 1

3

通常、暗号文は、送信中にバイナリセーフになるようにbase64でエンコードされます。

また、ECBでは3DESを使用しません。それはひどいです、あなたはどこかからこれをコピーして貼り付けたに違いありません。cbcモードでAESを使用し、cmacまたはhmacの追加を検討してください。

于 2012-06-18T17:15:30.933 に答える