#java #c# #android #kotlin #encryption
Вопрос:
У меня есть этот код, который я использую в своем приложении на C# (рабочий стол Windows); тем не менее, я хочу перенести свое приложение на Android, но я не знаю способа, который дает те же результаты шифрования/дешифрования в Kotlin или Java. До сих пор я пробовал несколько решений, но ни одно из них не работало для меня (так как они не дают идентичных результатов для моего приложения на C#).:
Я попробовал это решение (но оно не дало того же результата шифрования): https://www.programmersought.com/article/74841385394/
Я хочу, чтобы как мое приложение для рабочего стола Windows (C#), так и мои варианты приложений для Android (Kotlin) давали одинаковые результаты шифрования или дешифрования.
Мой код на C# :
private static string key = "123456789";
private static TripleDESCryptoServiceProvider CryptoServiceProvider()
{
TripleDESCryptoServiceProvider myCryptoService = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider myMD5_Service = new MD5CryptoServiceProvider();
myCryptoService.Key = myMD5_Service.ComputeHash(Encoding.Unicode.GetBytes(key));
myCryptoService.Mode = CipherMode.ECB;
return myCryptoService;
}
private static string Encrypt(string message)
{
ICryptoTransform myEncryptor = CryptoServiceProvider().CreateEncryptor();
byte[] bytes = Encoding.Unicode.GetBytes(message);
return Convert.ToBase64String(myEncryptor.TransformFinalBlock(bytes, 0, bytes.Length));
}
private static string Decrypt(string message)
{
ICryptoTransform myEncryptor = CryptoServiceProvider().CreateDecryptor();
byte[] messageBytes = Convert.FromBase64String(message);
byte[] _messageBytes = myEncryptor.TransformFinalBlock(messageBytes, 0, messageBytes.Length);
return Encoding.Unicode.GetString(_messageBytes, 0, _messageBytes.Length);
}
Зашифровать(«Мое сообщение») => bRhsN5v76jrQcl54VrTKIAtsTAK0Hq3B
Расшифровать(«bRhsN5v76jrQcl54VrTKIAtsTAK0Hq3B») => Мое сообщение
Итак, простыми словами, мне нужен способ перенести логику этого кода в Kotlin (или Java, если необходимо).
Примечание 1: Я не могу изменить методы шифрования/дешифрования, используемые в моем приложении на C#, потому что это все испортило бы для меня… Поэтому Я НЕ МОГУ НИ использовать какой-либо другой криптографический алгоритм, НИ модифицировать существующие методы.
Примечание 2: Я был бы очень признателен, если бы было найдено решение, использующее Kotlin вместо Java.
Комментарии:
1. Пожалуйста, посмотрите programmersought.com/article/74841385394
2. Это просто шифрование с тройным DES в варианте с двумя ключами с использованием MD5 для вывода ключа. Единственная ловушка, которую я вижу,-это кодировка, используемая для открытого текста и ключа: MS указывает кодировку UTF-16LE (little andian)
Unicode
. Пожалуйста, опубликуйте свой последний код Kotlin/Java и опишите проблему.3. Обратите внимание, что код C# является многократно небезопасным (сломанный MD5, получение ключа из пароля с дайджестом, ECB) и неэффективным (тройной DES).