Мне нужна помощь в извлечении зашифрованной строки AES128-EBC под Универсальное приложение Windows.
У меня есть пароль в строке, который используется в качестве ключа. С его 32-разрядным значением MD5 хэш-значения я хотел бы зашифровать текст с помощью AES128-EBC. Теперь я использую это для создания MD5Hash:AES128-ECB под UWP
public string GetMD5Hash(String strMsg)
{
string strAlgName = HashAlgorithmNames.Md5;
IBuffer buffUtf8Msg = CryptographicBuffer.ConvertStringToBinary(strMsg, BinaryStringEncoding.Utf8);
HashAlgorithmProvider objAlgProv = HashAlgorithmProvider.OpenAlgorithm
string strAlgNameUsed = objAlgProv.AlgorithmName;
IBuffer buffHash = objAlgProv.HashData(buffUtf8Msg);
if (buffHash.Length != objAlgProv.HashLength)
{
throw new Exception("There was an error creating the hash");
}
string hex = CryptographicBuffer.EncodeToHexString(buffHash);
return hex;
}
И этот код для шифрования:
public string Encrypt(string input, string pass)
{
SymmetricKeyAlgorithmProvider provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcbPkcs7);
CryptographicKey key;
string encrypted = "";
byte[] keyhash = Encoding.ASCII.GetBytes(GetMD5Hash(pass));
key = provider.CreateSymmetricKey(CryptographicBuffer.CreateFromByteArray(keyhash));
IBuffer data = CryptographicBuffer.CreateFromByteArray(Encoding.Unicode.GetBytes(input));
encrypted = CryptographicBuffer.EncodeToBase64String(CryptographicEngine.Encrypt(key, data, null));
return encrypted;
}
Причина, почему я использую SymmetricAlgorithmNames.AesEcbPkcs7
, когда я использую SymmetricAlgorithmNames.AesEcb
выход строка пуста. Я не понимаю, почему. Мой вопрос: мой код создает шифрование AES128-ECB? Потому что я не уверен, что это так. Поскольку программное обеспечение, ожидающее, что эти зашифрованные данные не распознают его, поэтому он не может его расшифровать.
Если вам нужна безопасность: 1. Не используйте режим ECB, он тоже небезопасен, см. [Режим ECB] (https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29), прокрутите вниз Пингвину. Используйте режим CBC со случайным iv, добавьте его к зашифрованным данным. 2. Не используйте MD5 для получения ключа шифрования. Итерации по HMAC со случайной солью в течение приблизительно 100 мс (соль должна быть сохранена с хешем). Используйте такие функции, как password_hash, PBKDF2, Bcrypt и аналогичные функции. Дело в том, чтобы заставить злоумышленника потратить много времени на поиск паролей грубой силой. – zaph
@zaph, к сожалению, существуют даже стандарты IETF в зависимости от ECB или других недостающих частей UWP. Вы не всегда можете использовать другое. –
@LexLi Конечно, но там много использования без каких-либо причин, кроме какого-то одного кода, с которым работает разработчик. IOW, нужно понять понятную причину использования режима ECB. Здесь у нас также есть хеш MD5 для использования для генерации пароля, поэтому я предполагаю, возможно, неправильно, что режим ECB используется без уважительной причины или понимания. – zaph