шифрование — эквивалент UWP для метода PHP mcrypt_encrypt

Мне нужна помощь, чтобы найти эквивалент C # для метода PHP mcrypt_encrypt. Я пытался использовать пространство имен Windows.Security.Cryptography для шифрования AES CBC, но невозможно использовать 8-байтовый IV.

Вот мой код:

var encoding = BinaryStringEncoding.Utf8;

IBuffer buffMsg = CryptographicBuffer.ConvertStringToBinary(strToEncrypt, encoding);

var objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(AES_CBC);

// strToEncrypt padding
var padding = 16 - (buffMsg.Length % 16);
if (padding > 0)
{
var buffWithPadding = new byte[buffMsg.Length + padding];
buffMsg.ToArray().CopyTo(buffWithPadding, 0);
buffMsg = CryptographicBuffer.CreateFromByteArray(buffWithPadding);
}

var key = CryptographicBuffer.CreateFromByteArray(_serverKey);
var iv = CryptographicBuffer.CreateFromByteArray(ivPadding);

IBuffer buffEncrypt = CryptographicEngine.Encrypt(objAlg.CreateSymmetricKey(key), buffMsg, iv);

return CryptographicBuffer.EncodeToBase64String(buffEncrypt);

На стороне сервера метод mcrypt_decrypt использует 128-битный ключ AES (16 байтов) и вектор инициализации 8 байтов. Однако, с библиотекой криптографии UWP кажется, что размер IV также должен иметь размер 16 байтов.

Я попытался заполнить свой IV 8 нулевыми байтами. Это «работает», но результат не совпадает с методом mcrypt_encrypt (из PHP).

Есть ли у вас решение для шифрования в режиме AES CBC с моим 16-байтовым ключом и 8-байтовым IV?

Благодарю.
Самуил

-1

Решение

Итак, моя проблема заключалась в преобразовании строки в байтовый массив. Я использовал следующий метод (который вы получите на других постах), но он не работает в моем случае:

public static byte[] StringToByteArray(string hex)
{
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}

И правильный путь:

var bytes = Encoding.UTF8.GetBytes(hexString);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]