В настоящее время я занимаюсь разработкой приложения для Windows с использованием C # и занимаюсь разработкой мобильного приложения с использованием Java.
Программное обеспечение Windows и мобильное приложение будут работать вместе, приложение Windows будет хранить информацию и шифровать определенную информацию перед ее сохранением в онлайн-базе данных.
Мобильное приложение будет извлекать информацию из онлайновой базы данных и должно будет расшифровать зашифрованную строку, полученную из базы данных.
Метод шифрования, который я использую в C #, указан ниже
byte[] clearTextBytes = Encoding.UTF8.GetBytes(encryptionString);
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
MemoryStream ms = new MemoryStream();
byte[] rgbIV = Encoding.ASCII.GetBytes("ryojvlzmdalyglrj");
byte[] key = Encoding.ASCII.GetBytes("hcxilkqbbhczfeultgbskdmaunivmfuo");
CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);
cs.Write(clearTextBytes, 0, clearTextBytes.Length);
cs.Close();
return Convert.ToBase64String(ms.ToArray());
Метод Windows работает нормально.
Код, который я использую в Java, выглядит следующим образом:
KeySpec ks = new DESKeySpec("hcxilkqbbhczfeultgbskdmaunivmfuo".getBytes("UTF-8"));
SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(ks);
String ivString = "ryojvlzmdalyglrj";
byte[] ivByte = ivString.getBytes("UTF-8");
IvParameterSpec iv = new IvParameterSpec(ivByte);
//RC5ParameterSpec iv = new RC5ParameterSpec(ivByte);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encoded = cipher.doFinal(Base64.decodeBase64("iNtaFme3B/e6DppNSp9QLg=="));
Log.d("Decoded Password", encoded.toString());
Поскольку оба метода должны шифровать и дешифровать одну и ту же строку вместе, он должен использовать один и тот же ключ и IV. Единственная проблема, с которой я сталкиваюсь, заключается в том, что в методе java IVParameterSpec входит в зацепку с ошибкой, которая говорит, что IV должен иметь длину 8 байт.
Как я могу решить эту проблему, чтобы у меня был тот же IV, что и в C #.
Спасибо за помощь