Я использую AES-128 CBC.
Данные хорошо шифруются и прекрасно расшифровываются. на стороне javascript.
Однако, когда данные передаются в Javacode, зашифрованные данные доставляются нормально, но как только они расшифровываются и декодируются, только корейские буквы кажутся сломанными, хотя английские буквы и цифры отображаются нормально.
Коды приведены ниже.
Первый — это код JS, который отправляет данные. Функция дешифрования предназначена для проверки правильности расшифровки.
Код: Выделить всё
function encrypt(text, key, iv) {
const encodedText = text
const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
let encrypted = cipher.update(encodedText, 'utf8', 'base64');
encrypted += cipher.final('base64');
return encrypted;
}
function decrypt(encrypted, key, iv) {
const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
let decrypted = decipher.update(encrypted, 'base64', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
Код: Выделить всё
public String aesDecode(String str) throws Exception {
System.out.println("INPUT : "+str);
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, this.keySpec, new IvParameterSpec(this.iv.getBytes(StandardCharsets.UTF_8)));
byte[] decrypted = c.doFinal(Base64.getDecoder().decode(str));
return new String(decrypted, "euc-kr");
}
}
то они выглядят как «ENG�8羲123»
Единственная часть корейского письма демонстрирует некоторую проблему.
Будем благодарны за любую помощь или предложения. Я пробую все, но пока не понимаю.
Я пытался сначала закодировать данные перед отправкой, но возникла проблема с заполнением, поэтому я не мог отправлять письма длиннее, чем 15 случаев.
затем я попытался сначала закодировать, а затем пустой параметр из cipher.final()
но затем размер байта был неправильным поэтому он вернул ошибку.
Подробнее здесь: https://stackoverflow.com/questions/785 ... -decrypted