Я пытаюсь зашифровать текст в C # и расшифровать его на python, используя режим EAX в AES.Я использую Bouncy Castle для EAX в C # и AES для Python.
Я могу успешно шифровать и дешифровать как в C #, так и в Python, однако я заметил, что когда C # шифрует текст,вывод значительно дольше, чем когда Python шифрует его.
Не уверен, что это уместно, но я отправляю его из C # в Python через сервер, и я подтвердил, что все отправлено в порядке.Клиент запускает эмулятор Android, а сервер работает под управлением Windows 10.
Метод, который я использую для проверки кода C #:
const int MAC_LEN = 16
//The Key and Nonce are randomly generated
AeadParameters parameters = new AeadParameters(key, MAC_LEN * 8, nonce);
string EaxTest(string text, byte[] key, AeadParameters parameters)
{
KeyParameter sessKey = new KeyParameter(key);
EaxBlockCipher encCipher = new EAXBlockCipher(new AesEngine());
EaxBlockCipher decCipher = new EAXBlockCipher(new AesEngine());
encCipher.Init(true, parameters);
byte[] input = Encoding.Default.GetBytes(text);
byte[] encData = new byte[encCipher.GetOutputSize(input.Length)];
int outOff = encCipher.ProcessBytes(input, 0, input.Length, encData, 0);
outOff += encCipher.DoFinal(encData, outOff);
decCipher.Init(false, parameters);
byte[] decData = new byte[decCipher.GetOutputSize(outOff)];
int resultLen = decCipher.ProcessBytes(encData, 0, outOff, decData, 0);
resultLen += decCipher.DoFinal(decData, resultLen);
return Encoding.Default.GetString(decData);
}
Метод, который я использую для тестированиякод python:
def encrypt_text(data, key):
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
cipher_text, mac_tag = cipher.encrypt_and_digest(data)
return [cipher_text, mac_tag, nonce]
def decrypt_text(data, key, mac_tag, nonce):
decrypt = AES.new(key, AES.MODE_EAX, nonce=nonce, mac_len=16)
plaintext = decrypt.decrypt_and_verify(data, mac_tag)
return plaintext
Для проверки строки "a" в C # я последовательно получаю зашифрованный текст из 17 байтов, а с помощью python я последовательно получаю зашифрованный текст из 1 байта.Когда я пытаюсь расшифровать в python, я получаю эту ошибку [ValueError: Ошибка проверки MAC].И Mac, и одноразовый номер последовательно составляют 16 байтов.
Пример C # Вывод: 34 2D 0A E9 8A 37 AC 67 0E 95 DB 91 D7 8C E5 4E 9F
Пример вывода Python: DD