Я пытаюсь перенести некоторый код Python на C #, и в коде есть часть, где он шифрует строку с помощью AES со следующим ключом:
'\ xd7 \ XDF \ xca2 \ xd0Vhu \ xeb \ x06 \ xa0 \ Xba \ п \ xa2 \ x07O \ xc1 \ x8b \ XCF \ x8f2 & т \ xc0 \ x92 \ XC4 \ xa5 \ x0b> \ XB4 \ xe7 \ XBC '
Этот ключ составляет 32 байта в Python, но проблема в том, что в C # это 30 байтов, когда я преобразую эту строку (Encoding.Default.GetBytes
), поэтому я не могу сгенерировать ключ AES.
Почему длина ключа 32 в Python и длина байтового массива равна 30 в C #?
Преобразование ключа в байтовый массив:
byte[] key = Encoding.Default.GetBytes("\xd7\xdf\xca2\xd0Vhu\xeb\x06\xa0\xba\n\xa2\x07O\xc1\x8b\xcf\x8f2&t\xc0\x92\xc4\xa5\x0b>\xb4\xe7\xbc");
Получение неверного размера ключа для исключения алгоритма (потому что это 30 байтов, а не 32):
byte[] encrypted;
byte[] iv;
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = key;
aesAlg.GenerateIV();
iv = aesAlg.IV;
aesAlg.Mode = CipherMode.CBC;
var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, iv);
using (var msEncrypt = new MemoryStream())
{
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (var swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write("test");
}
encrypted = msEncrypt.ToArray();
}
}
}