0

プロジェクトに TripleDesCrypto エンコーディングを使用しようとすると、デコーディング時に不正なデータ エラーが発生し続けます。これは私がVB.netに持っていたものです

Public Shared Function encode(message As String) As String
    Dim _Key As Byte() = ASCIIEncoding.ASCII.GetBytes("asdf1325asdfs123")
    Dim _IV As Byte() = ASCIIEncoding.ASCII.GetBytes("123ads12")
    Dim sOutput As String = ""
    Try

        Dim tdes As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()
        Dim InputBuffer As Byte() = Encoding.UTF8.GetBytes(message)
        Dim ms As New MemoryStream()
        Dim encStream As New CryptoStream(ms, tdes.CreateEncryptor(_Key, _IV), CryptoStreamMode.Write)
        encStream.Write(InputBuffer, 0, InputBuffer.Length)
        sOutput = Convert.ToBase64String(ms.ToArray())
        encStream.Close()
        ms.Close()
    Catch ex As Exception
        Throw New ArgumentException("Couldn't Encode Message: " + ex.Message)
    End Try
    Return sOutput
End Function

返す

Cui4ahedjTI=

だから私はこれでC#.netで同じことを試しました

    public string encode(string message)
    {
        byte[] _Key  = ASCIIEncoding.ASCII.GetBytes("asdf1325asdfs123");
        byte[] _IV = ASCIIEncoding.ASCII.GetBytes("123ads12");
        string sOutput = "";
        try
        {
            TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
            byte[] InputBuffer = Encoding.UTF8.GetBytes(message);
            MemoryStream ms = new MemoryStream();
            CryptoStream encStream = new CryptoStream(ms, tdes.CreateEncryptor(_Key, _IV), CryptoStreamMode.Write);
            encStream.Write(InputBuffer, 0, InputBuffer.Length);
            encStream.FlushFinalBlock();
            sOutput = Convert.ToBase64String(ms.ToArray());
            encStream.Close();
            ms.Close();
        }
        catch (Exception ex)
        {
            throw new ArgumentException("couldn't encode message: " + ex.Message);
        }

        return sOutput;
    }

返す

ac6EeiwfAQHk26AhfAfaHA==

デコードは、C# で記述されていると想定しているサードパーティのアプリで行われます

質問は、結果が異なるのはなぜですか? vb.net コードが C# コードと同じ結果を返すようにする方法はありますか?

4

1 に答える 1

1

一見すると、C# バージョンには への呼び出しがあることがわかりますencStream.FlushFinalBlock();が、VB にはありません。この差ではないでしょうか?

于 2012-04-18T12:11:48.553 に答える