4

Java側のBouncyCastleAesFastEngineで暗号化された標準のC#AesCryptoServiceProviderを使用してデータを復号化する必要があります。(Bounca Castleのc#実装を使用してデータを復号化することは問題ありません)

これを行う方法はありますか?

バウンシーキャッスルの実装で使用されているIVが見つかりません...何かありますか?

どんな助けでも本当に大丈夫でしょう!マーカス

編集:

次のコードは、AesFastEngineを初期化するために使用されます。

BlockCipher coder = new AESFastEngine();
CFBBlockCipher cfbCipher = new CFBBlockCipher(coder, 8);
StreamCipher streamCipher = new StreamBlockCipher(cfbCipher);
streamCipher.Init(true, keyParameter);
streamCipher.ProcessBytes(data, 0, data.Length, encodedMessageBytes, 0);

編集:

こんにちはGrec、あなたの答えに感謝します、しかしそれはまだ機能していません...私はここにダウンロードするためのサンプルソリューションを持っています。

2つのボタンをクリックすると、すでに別の暗号化された配列が表示されます... ??? 弾力がある城で生成された配列を復号化すると、暗号化されたデータの長さが無効であるという例外が発生します...

これが私が解読のために書いたコードです:

AesManagedAlg = new AesManaged();
AesManagedAlg.Mode = CipherMode.CBC;
AesManagedAlg.FeedbackSize = 8;
AesManagedAlg.Key = key;
// Use Test
AesManagedAlg.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 

// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = AesManagedAlg.CreateDecryptor(AesManagedAlg.Key, AesManagedAlg.IV);

// Create the streams used for decryption.
msDecrypt = new MemoryStream(cipherText);
csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);

// Read the decrypted bytes from the decrypting stream
var decryptedData = new List<byte>();
var buffer = new byte[1];
while (true) {
    var readedBytes = csDecrypt.Read(buffer, 0, buffer.Length);
    if(readedBytes == 0) break;
    decryptedData.Add(buffer[0]);
}
ret = decryptedData.ToArray();

編集:

近づいています!RijndaelManaged Managedは機能していますが、暗号化されたデータが1バイト多くなります。他のすべてのバイトは同じです...私はたくさん試しましたが、弾力がある城で最後のバイトを取得する方法がわかりません...この最後のバイトがないと、RijndaelManagedでデータを復号化することはできません...

4

1 に答える 1

1

使用している IV はデフォルトの IV で、すべてゼロです。AesManagedオブジェクトを作成し、モードをCipherMode.CFBに設定し、FeedbackSize を 8 に設定することにより、.NET でこれを実行できるはずです。次に、CreateEncryptorメソッドを使用して を作成しICryptoTransform、これを使用してCryptoStream. この例は、最後のいくつかのステップに役立つはずです。

編集:

あなたが投稿した新しいコードを見ると、2 行目が間違っています。CBCではなくCFBモードを指定する必要があります。2行目は

AesManagedAlg.Mode = CipherMode.CFB;

また、データのバイトを復号化しているように見えますが、平文にreadedBytes追加するだけbuffer[0]で残りを無視しています。

編集2:

前述のとおりAesManaged、CFB モードでは使用できませんが、RijndaelManaged は使用できます。AES アルゴリズムは、128 ビットのブロックサイズと 128、192、または 256 ビットのキー サイズに制限された単なる Rijndael アルゴリズムであることに注意してください。例については、同様の質問に対する私の回答を参照してください。

于 2010-07-01T03:06:24.937 に答える