У меня есть приложение в 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?
Из документации вы можете проверить, это нормально, что вы получаете другой массив байтов,
GetByte()
всегда возвращаете случайные ключевые байты. подробнее