Решил реализовать резервное копирование из БД андройда на сервер (все данные хранятся в зашифрованном виде) и чтобы можно было в случае чего выгрузить всё с сервера обратно.
Шифрую строку вот так:
public static byte[] encrypt(String text) throws Exception {
byte[] clear = text.getBytes("UTF-8");
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
sr.setSeed(password);
kgen.init(256, sr);
SecretKey skey = kgen.generateKey();
byte[] key = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
После этого мне нужно передать её на сервер POST'ом, но функция библиотеки JSON для отправки запроса принимает только String. По этому сначала попробовал сделать так:
byte[] passBytes = new byte[0];
try {
passBytes = mAES.encrypt("test");
} catch (Exception e) {
e.printStackTrace();
}
try {
a = mAES.decrypt(passBytes.toString().getBytes(Charset.forName("UTF-8"))); //без параметра charset тоже пробовал
} catch (Exception e) {
e.printStackTrace();
}
Расшифровать не получается, выкидывает exception.
При шифровании/рашифровании byte[] всё нормально.
3 день уже бьюсь с этим.
Также пробовал переводить вот так.
byte[] passBytes = new byte[0];
StringBuffer sb = new StringBuffer();
try {
passBytes = mAES.encrypt("text");
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0; i < passBytes.length; i++) {
sb.append(Integer.toString((passBytes[i] & 0xff) + 0x100, 16).substring(1));
}
try {
a = mAES.decrypt(sb.toString().getBytes(Charset.forName("UTF-8")));
} catch (Exception e) {
e.printStackTrace();
}