Intereting Posts
Удалить строку между настраиваемыми пунктами меню Как сделать что-то после того, как пользователь нажмет на меня EditText Как автоматически переносится андроид? Почему Log.d () ничего не печатает при запуске теста локального блока Android? Отображение карты Google Android Google возвращает ошибку при использовании onTap () – предполагается, что будет показан Alertdialog ListView с изображениями и текстом GetSurfaceTexture () возвращает null Обратный вызов exoplayer для Android при поиске Нужно ли каждому новому виду создавать новые макеты? Каков правильный способ вызова MobileAds.initialize ()? Как добавить пользовательское состояние кнопки Выделение объекта из родительского класса в дочерний UnsupportedOperationException AudioEffect: неверная операция с параметрами Как получить доступ к строке с использованием динамического имени строки в android (аналогично eval в javascript)? База данных Android SQLite, таблица отката WHY и воссоздание при обновлении

Шифрование и дешифрование xml

Я делаю приложение, в котором я должен зашифровать xml с моей стороны и отправить его на сервер, и в ответ я получу xml, и я должен его расшифровать. Я не собираюсь зашифровывать и расшифровывать. Мой код выглядит следующим образом

<?xml version='1.0' encoding='utf-8'?><adm_auth_req><user_name>user.s7</user_name><password>gspcsmo</password></adm_auth_req> 

Я использую этот код для шифрования и расшифровки его

 public string encryptData(string key, string data) { int keyLen = key.Length; int dataLen = Convert.ToInt16(data.Length); char chData; char chKey; char[] data1 = data.ToCharArray(); char[] key1 = key.ToCharArray(); StringBuilder encryptedData = new StringBuilder(); for (int i = 0; i < dataLen; i++) { chData = data1[i]; for (int j = 0; j < keyLen; j++) { chKey = key1[j]; chData = (char)(chData ^ chKey); } encryptedData.Append(chData); } return (encryptedData.ToString()); } 

Но все равно все напрасно. Может ли кто-нибудь сказать мне, как зашифровать его и расшифровать результат?

Я использовал алгоритм DES для шифрования и дешифрования.

Для шифрования: здесь после шифрования я пишу файл для сохранения. Вы можете сохранить его с другим именем (temp) и отправить его на сервер. После успешной отправки вы можете удалить этот зашифрованный файл

  FileOutputStream fos = null ; CipherInputStream cis; byte key[] = "abcdEFGH".getBytes(); SecretKeySpec secretKey = new SecretKeySpec(key,"DES"); Cipher encrypt = Cipher.getInstance("DES/ECB/PKCS5Padding"); encrypt.init(Cipher.ENCRYPT_MODE, secretKey); InputStream fis = new ByteArrayInputStream(fileData);//Here I am getting file data as byte array. You can convert your file data to InputStream by other way too. File dataFile = new File(dataDir,fileName); //dataDir is location where my file is stored if(!dataFile.exists()){ cis = new CipherInputStream(fis,encrypt); try { fos = new FileOutputStream(dataFile); byte[] b = new byte[8]; int i; while ((i=cis.read(b)) != -1) { fos.write(b, 0, i); } return fileName; } finally{ try { if(fos != null) { fos.flush(); fos.close(); } cis.close(); fis.close(); } catch (IOException e) { //IOException } } } return ""; 

Для расшифровки:

  CipherInputStream cis; FileOutputStream fos = null; FileInputStream fis = null; File dataFile = new File(dataDir,fileName); // here I am getting encrypted file from server File newDataFile = new File(dataDir,fileName+"_TEMP"); // I am creating temporary decrypted file byte key[] = "abcdEFGH".getBytes(); SecretKeySpec secretKey = new SecretKeySpec(key,"DES"); Cipher decrypt = Cipher.getInstance("DES/ECB/PKCS5Padding"); decrypt.init(Cipher.DECRYPT_MODE, secretKey); try { fis = new FileInputStream(dataFile); } catch(Exception e) { //Exception } if(dataFile.exists()){ cis = new CipherInputStream(fis,decrypt); try { fos = new FileOutputStream(newDataFile); byte[] b = new byte[8]; int i; while ((i=cis.read(b)) != -1) { fos.write(b, 0, i); } return newDataFile; } finally{ try { if(fos != null) { fos.flush(); fos.close(); } cis.close(); fis.close(); } catch (IOException e) { //IOException } } } 

В чем проблема, которую вы решаете?

Может быть, SSL вам подходит? Шифрование из коробки, стандартное решение.

Также вы можете взглянуть на JCA . Но я думаю, это будет слишком тяжелое решение для вашей проблемы.

На мой взгляд, вы не должны пытаться внедрить пользовательский алгоритм в качестве первого, вы изобретаете колесо, и, во-вторых, он, вероятно, не будет рядом с безопасностью, как другие более стандартные процедуры шифрования. Если бы я был вами, я бы рассмотрел некоторые хорошие библиотеки шифрования Java. Один из них я нашел здесь, http://www.bouncycastle.org/latest_releases.html

На SO есть уже некоторые ответы, которые могли бы вам ответить.

Шифровать и расшифровать строку в java

Как шифровать String в Java

Почему вы не используете Twofish для этого, XML – это текст, и все, что вам нужно использовать, – это алгоритм, и вы можете найти много примеров для этого.