Google Android - это несложно
http://forum.startandroid.ru/

Кодирование строки
http://forum.startandroid.ru/viewtopic.php?f=47&t=4633
Страница 1 из 1

Автор:  qw123 [ 20 авг 2014, 20:30 ]
Заголовок сообщения:  Кодирование строки

Здравствуйте, подскажите пожалуйста как вообще на java можно кодировать/декодировать строки? Как я понимаю самый простой вариант это использовать xor, но как потом из переменной типа byte получить это числовое значение переменной, ведь нужно чтобы все символы были читабельны, а это проще всего-цифры. И как потом байту присвоить эти числовые значения именно как байтовое значение, а не чтобы он принял эти цифры за строку и переводил строку цифр в байты... В общем немного не разберусь я сам. Не бросайте в беде собрата-программиста :D

Автор:  KamiSempai [ 21 авг 2014, 12:16 ]
Заголовок сообщения:  Re: Кодирование строки

Не совсем понимаю, что вам нужно. Массив байт в строку закодировать или наоборот? Или может быть шифровать?

Автор:  qw123 [ 21 авг 2014, 12:31 ]
Заголовок сообщения:  Re: Кодирование строки

KamiSempai писал(а):
Не совсем понимаю, что вам нужно. Массив байт в строку закодировать или наоборот? Или может быть шифровать?

Именно, шифровать! Строку в другую строку.

Автор:  KamiSempai [ 21 авг 2014, 15:28 ]
Заголовок сообщения:  Re: Кодирование строки

Как вариан, можно использовать Cipher.

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.         private static final String CRYPT_TRANSFORMATION = "AES/ECB/PKCS5Padding";
  2.         private static final String CRYPT_ALGORITHM = "AES";
  3.         private static final String CRYPT_KEY_ALGORITHM = "PBKDF2WithHmacSHA1";
  4.         private static final byte[] CRYPT_KEY_SALT = "Длиннная строка со случайным набором символов.".getBytes();
  5.         private static final int CRYPT_KEY_ITERATIONS = 1000;
  6.  
  7.         public String encrypt(String string, String key) {
  8.                 byte[] byteArray = null;
  9.                 try {
  10.                         byteArray = cryptByteArray(string.getBytes(), key, Cipher.ENCRYPT_MODE);
  11.                 } catch (Exception e) {
  12.                         e.printStackTrace();
  13.                         // Не получилось зашифровать строку. Если сделать все правильно, ошибка возникать не должна.
  14.                         return null;
  15.                 }
  16.                 return new String(android.util.Base64.encode(byteArray, 0));
  17.         }
  18.        
  19.         public String decrypt(String string, String key) {
  20.                 byte[] inputByteArray = android.util.Base64.decode(string.getBytes(), 0);
  21.                 byte[] byteArray = null;
  22.                 try {
  23.                         byteArray = cryptByteArray(inputByteArray, key, Cipher.DECRYPT_MODE);
  24.                 } catch (Exception e) {
  25.                         e.printStackTrace();
  26.                         // Не удалось расшифровать строку. Вероятно, не правильно указан key.
  27.                 }
  28.                 if(byteArray != null)
  29.                         return new String(byteArray);
  30.                 return null;
  31.         }
  32.        
  33.         public byte[] cryptByteArray(byte[] byteArray, String key, int cryptMode) throws Exception {
  34.                 byte[] result = null;
  35.                 SecretKeyFactory factory;
  36.                 factory = SecretKeyFactory
  37.                                 .getInstance(CRYPT_KEY_ALGORITHM);
  38.                 SecretKey tmp = factory.generateSecret(new PBEKeySpec(key
  39.                                 .toCharArray(), CRYPT_KEY_SALT, CRYPT_KEY_ITERATIONS, 128));
  40.                 SecretKeySpec keySpec = new SecretKeySpec(tmp.getEncoded(), CRYPT_ALGORITHM);
  41.                 Cipher сipher = Cipher.getInstance(CRYPT_TRANSFORMATION);
  42.                 сipher.init(cryptMode, keySpec);
  43.                 result = сipher.doFinal(byteArray);
  44.                 return result;
  45.         }

Автор:  qw123 [ 21 авг 2014, 19:51 ]
Заголовок сообщения:  Re: Кодирование строки

KamiSempai писал(а):
Как вариан, можно использовать Cipher.

Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.         private static final String CRYPT_TRANSFORMATION = "AES/ECB/PKCS5Padding";
  2.         private static final String CRYPT_ALGORITHM = "AES";
  3.         private static final String CRYPT_KEY_ALGORITHM = "PBKDF2WithHmacSHA1";
  4.         private static final byte[] CRYPT_KEY_SALT = "Длиннная строка со случайным набором символов.".getBytes();
  5.         private static final int CRYPT_KEY_ITERATIONS = 1000;
  6.  
  7.         public String encrypt(String string, String key) {
  8.                 byte[] byteArray = null;
  9.                 try {
  10.                         byteArray = cryptByteArray(string.getBytes(), key, Cipher.ENCRYPT_MODE);
  11.                 } catch (Exception e) {
  12.                         e.printStackTrace();
  13.                         // Не получилось зашифровать строку. Если сделать все правильно, ошибка возникать не должна.
  14.                         return null;
  15.                 }
  16.                 return new String(android.util.Base64.encode(byteArray, 0));
  17.         }
  18.        
  19.         public String decrypt(String string, String key) {
  20.                 byte[] inputByteArray = android.util.Base64.decode(string.getBytes(), 0);
  21.                 byte[] byteArray = null;
  22.                 try {
  23.                         byteArray = cryptByteArray(inputByteArray, key, Cipher.DECRYPT_MODE);
  24.                 } catch (Exception e) {
  25.                         e.printStackTrace();
  26.                         // Не удалось расшифровать строку. Вероятно, не правильно указан key.
  27.                 }
  28.                 if(byteArray != null)
  29.                         return new String(byteArray);
  30.                 return null;
  31.         }
  32.        
  33.         public byte[] cryptByteArray(byte[] byteArray, String key, int cryptMode) throws Exception {
  34.                 byte[] result = null;
  35.                 SecretKeyFactory factory;
  36.                 factory = SecretKeyFactory
  37.                                 .getInstance(CRYPT_KEY_ALGORITHM);
  38.                 SecretKey tmp = factory.generateSecret(new PBEKeySpec(key
  39.                                 .toCharArray(), CRYPT_KEY_SALT, CRYPT_KEY_ITERATIONS, 128));
  40.                 SecretKeySpec keySpec = new SecretKeySpec(tmp.getEncoded(), CRYPT_ALGORITHM);
  41.                 Cipher сipher = Cipher.getInstance(CRYPT_TRANSFORMATION);
  42.                 сipher.init(cryptMode, keySpec);
  43.                 result = сipher.doFinal(byteArray);
  44.                 return result;
  45.         }

Спасибо, попробую :D

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/