Для cipher перевожу данные из byte[] в строку, потом из той же строки обратно. но обратно получаю не то же самое, в чем может быть ошибка?
Всем привет, подскажите плиз: перевожу данные из byte[] в строку, потом из той же строки обратно. но обратно получаю не то же самое, в чем может быть ошибка?
public String encryptString(String text) {
byte[] encrypted = null;
try {
// encrypt the text
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
encrypted = cipher.doFinal(text.getBytes(StandardCharsets.UTF_8));
}
catch(Exception e) {
e.printStackTrace();
}
return new String(encrypted, StandardCharsets.UTF_8);
}
public String decryptString(String encrypted) {
byte[] text = null;
try {
// decrypt the text
cipher.init(Cipher.DECRYPT_MODE, aesKey);
text = cipher.doFinal(encrypted.getBytes(StandardCharsets.UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
return new String(text, StandardCharsets.UTF_8);
}
эти методы вызываются так:
String encrypted = crypto.encryptString(activationCode);
String activationQuery = URLEncoder.encode(encrypted, StandardCharsets.UTF_8);
System.err.println(encrypted);
System.err.println(activationQuery);
//test decrypt
String activationQueryD = URLDecoder.decode(activationQuery, StandardCharsets.UTF_8);
System.err.println(activationQueryD);
System.err.println(crypto.decryptString(activationQueryD));
Ответы (1 шт):
Автор решения: Igor Zboichik
→ Ссылка
Проблема в том, что зашифрованные байты не всегда могут быть преобразованы в строку с помощью набора символов UTF-8, и наоборот.
Вместо конструктора String можно использовать конвертацию через Base64:
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public String encryptString(String text) {
byte[] encrypted = null;
try {
// encrypt the text
cipher.init(Cipher.ENCRYPT_MODE, aesKey);
encrypted = cipher.doFinal(text.getBytes(StandardCharsets.UTF_8));
}
catch(Exception e) {
e.printStackTrace();
}
return Base64.getEncoder().encodeToString(encrypted);
}
public String decryptString(String encrypted) {
byte[] text = null;
try {
// decode the encrypted text
byte[] encryptedBytes = Base64.getDecoder().decode(encrypted);
// decrypt the text
cipher.init(Cipher.DECRYPT_MODE, aesKey);
text = cipher.doFinal(encryptedBytes);
} catch (Exception e) {
e.printStackTrace();
}
return new String(text, StandardCharsets.UTF_8);
}