Кодирование строки

Ответить
qw123
Сообщения: 41
Зарегистрирован: 27 июн 2014, 12:11

Кодирование строки

Сообщение qw123 » 20 авг 2014, 20:30

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

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Кодирование строки

Сообщение KamiSempai » 21 авг 2014, 12:16

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

qw123
Сообщения: 41
Зарегистрирован: 27 июн 2014, 12:11

Re: Кодирование строки

Сообщение qw123 » 21 авг 2014, 12:31

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

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Кодирование строки

Сообщение KamiSempai » 21 авг 2014, 15:28

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

[syntax=java] private static final String CRYPT_TRANSFORMATION = "AES/ECB/PKCS5Padding";
private static final String CRYPT_ALGORITHM = "AES";
private static final String CRYPT_KEY_ALGORITHM = "PBKDF2WithHmacSHA1";
private static final byte[] CRYPT_KEY_SALT = "Длиннная строка со случайным набором символов.".getBytes();
private static final int CRYPT_KEY_ITERATIONS = 1000;

public String encrypt(String string, String key) {
byte[] byteArray = null;
try {
byteArray = cryptByteArray(string.getBytes(), key, Cipher.ENCRYPT_MODE);
} catch (Exception e) {
e.printStackTrace();
// Не получилось зашифровать строку. Если сделать все правильно, ошибка возникать не должна.
return null;
}
return new String(android.util.Base64.encode(byteArray, 0));
}

public String decrypt(String string, String key) {
byte[] inputByteArray = android.util.Base64.decode(string.getBytes(), 0);
byte[] byteArray = null;
try {
byteArray = cryptByteArray(inputByteArray, key, Cipher.DECRYPT_MODE);
} catch (Exception e) {
e.printStackTrace();
// Не удалось расшифровать строку. Вероятно, не правильно указан key.
}
if(byteArray != null)
return new String(byteArray);
return null;
}

public byte[] cryptByteArray(byte[] byteArray, String key, int cryptMode) throws Exception {
byte[] result = null;
SecretKeyFactory factory;
factory = SecretKeyFactory
.getInstance(CRYPT_KEY_ALGORITHM);
SecretKey tmp = factory.generateSecret(new PBEKeySpec(key
.toCharArray(), CRYPT_KEY_SALT, CRYPT_KEY_ITERATIONS, 128));
SecretKeySpec keySpec = new SecretKeySpec(tmp.getEncoded(), CRYPT_ALGORITHM);
Cipher сipher = Cipher.getInstance(CRYPT_TRANSFORMATION);
сipher.init(cryptMode, keySpec);
result = сipher.doFinal(byteArray);
return result;
}[/syntax]
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

qw123
Сообщения: 41
Зарегистрирован: 27 июн 2014, 12:11

Re: Кодирование строки

Сообщение qw123 » 21 авг 2014, 19:51

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

[syntax=java] private static final String CRYPT_TRANSFORMATION = "AES/ECB/PKCS5Padding";
private static final String CRYPT_ALGORITHM = "AES";
private static final String CRYPT_KEY_ALGORITHM = "PBKDF2WithHmacSHA1";
private static final byte[] CRYPT_KEY_SALT = "Длиннная строка со случайным набором символов.".getBytes();
private static final int CRYPT_KEY_ITERATIONS = 1000;

public String encrypt(String string, String key) {
byte[] byteArray = null;
try {
byteArray = cryptByteArray(string.getBytes(), key, Cipher.ENCRYPT_MODE);
} catch (Exception e) {
e.printStackTrace();
// Не получилось зашифровать строку. Если сделать все правильно, ошибка возникать не должна.
return null;
}
return new String(android.util.Base64.encode(byteArray, 0));
}

public String decrypt(String string, String key) {
byte[] inputByteArray = android.util.Base64.decode(string.getBytes(), 0);
byte[] byteArray = null;
try {
byteArray = cryptByteArray(inputByteArray, key, Cipher.DECRYPT_MODE);
} catch (Exception e) {
e.printStackTrace();
// Не удалось расшифровать строку. Вероятно, не правильно указан key.
}
if(byteArray != null)
return new String(byteArray);
return null;
}

public byte[] cryptByteArray(byte[] byteArray, String key, int cryptMode) throws Exception {
byte[] result = null;
SecretKeyFactory factory;
factory = SecretKeyFactory
.getInstance(CRYPT_KEY_ALGORITHM);
SecretKey tmp = factory.generateSecret(new PBEKeySpec(key
.toCharArray(), CRYPT_KEY_SALT, CRYPT_KEY_ITERATIONS, 128));
SecretKeySpec keySpec = new SecretKeySpec(tmp.getEncoded(), CRYPT_ALGORITHM);
Cipher сipher = Cipher.getInstance(CRYPT_TRANSFORMATION);
сipher.init(cryptMode, keySpec);
result = сipher.doFinal(byteArray);
return result;
}[/syntax]
Спасибо, попробую :D

Ответить