xamarin Android шифрование GetBytes метод разница с C#

У меня есть приложение в Visual Studio 2013 с методами шифрования паролей, и мне нужно перенести его на Xamarin Android.

Проблема у меня была в том, что метод шифрования в Xamarin дает другую строку шифрования.

Разница в GetBytesметоде.

Вот часть моего кода.

 public static string Encript(string ptexto, string pClave)
        {
     return Encript2(ptexto, pClave + "pass75dc@avz10", "s@lAvz", "MD5", 1, "@1B2c3D4e5F6g7H8", 128);
        } 


private static string Encript2(string textoQueEncriptaremos, string passBase, string saltValue, string hashAlgorithm, int passwordIterations, string initVector, int keySize)
        {
            byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
            byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);
            byte[] plainTextBytes = Encoding.UTF8.GetBytes(textoQueEncriptaremos);

            PasswordDeriveBytes password = new PasswordDeriveBytes(passBase,saltValueBytes, hashAlgorithm, passwordIterations);
            byte[] keyBytes = password.GetBytes(keySize / 8);

            RijndaelManaged symmetricKey = new RijndaelManaged()
            {
                Mode = CipherMode.CBC
            };

            ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes,initVectorBytes);
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor,CryptoStreamMode.Write);
            cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
            cryptoStream.FlushFinalBlock();
            byte[] cipherTextBytes = memoryStream.ToArray();
            memoryStream.Close();
            cryptoStream.Close();
            string cipherText = Convert.ToBase64String(cipherTextBytes);
            return cipherText;
        }

Линия, которая делает разницу

 byte[] keyBytes = password.GetBytes(keySize / 8);

Я не могу изменить шифрование в приложении c#, есть ли способ получить тот же результат в Xamarin?

1 ответ

  1. Из документации вы можете проверить, это нормально, что вы получаете другой массив байтов, GetByte()всегда возвращаете случайные ключевые байты. подробнее

    GetBytes(Int32) : Byte[]
    

    Возвращает псевдослучайные ключевые байты.