Java에서 Bouncy Castle AesFastEngine으로 암호화 된 표준 C# AesCryptoServiceProvider로 데이터의 암호를 해독해야합니다. (Bounca Castle의 C# 구현을 사용하여 데이터를 해독하는 데 아무런 문제가 없습니다.)C#으로 데이터 암호화 AesCryptoServiceProvider를 BouncyCastle AesFastEngine으로 암호화
방법이 있습니까?
나는 Bouncy Castle 구현에 사용 된 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);
편집 :
안녕하세요 그리스어, 귀하의 답변을 주셔서 감사합니다,하지만 여전히 작동하지 않습니다. .. here을 다운로드 할 샘플 솔루션이 있습니다.
두 개의 버튼을 클릭하면 이미 다른 암호화 된 배열을 얻을 수 있습니다 ... ???
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 관리가 작동하지만 1 바이트 더 많은 암호화 된 데이터를 제공합니다. 다른 모든 바이트는 동일합니다 ... 많이 tryed하지만 탄력성이있는 마지막 바이트를 얻는 방법을 모르겠습니다 ...이 마지막 바이트가 없으면 RijndaelManaged를 사용하여 데이터를 암호 해독 할 수 없습니다 ...
어떤 AES 모드를 사용 했습니까? 그냥 AesFastEngine을 사용한다고해서 충분한 정보가 없다고 말하는 것입니다. –
다음 코드는 AesFastEngine을 초기화하는 데 사용됩니다. IBlockCipher coder = new AesFastEngine(); CfbBlockCipher cfbCipher = 새 CfbBlockCipher (코더, 8); IStreamCipher streamCipher = 새 StreamBlockCipher (cfbCipher); streamCipher.Init (true, keyParameter); streamCipher.ProcessBytes (data, 0, data.Length, encodedMessageBytes, 0); 충분한 정보입니까? – Markus
코드를 복사하여 붙여 넣으십시오. 입력하지 마십시오. –