CryptoJS를 사용하여 암호화 된 java에서 텍스트를 해독하려고합니다. 나는 다른 기본 모드와 패딩을 사용하는 다른 게시물을 읽었으므로 둘 다 (java/cryptojs) aes/cbc/nopadding을 사용하도록 설정했습니다. 나는 더 이상 자바에서 예외가 없지만, 나는 암호 해독 중에 잘못된 출력을 얻고있다AES/CBC/NoPadding 암호 해독에서 왜곡 된 출력
암호화 (JS) :
var parsedLogin = JSON.parse(login);
var publicKey = "abcdefghijklmnio";
var publiciv = "abcdefghijklmnio";
var key = CryptoJS.enc.Hex.parse(publicKey);
var iv = CryptoJS.enc.Hex.parse(publiciv);
var encrypted = CryptoJS.AES.encrypt(parsedLogin.password, publicKey, {iv: publiciv}, { padding: CryptoJS.pad.NoPadding, mode: CryptoJS.mode.CBC});
// send encrypted to POST request
해독하려면 (자바)
String PUBLIC_KEY = "abcdefghijklmnio";
String PUBLIC_IV = "abcdefghijklmnio";
byte[] byteArr = PUBLIC_KEY.getBytes();
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
final SecretKeySpec secretKey = new SecretKeySpec(byteArr, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(PUBLIC_IV.getBytes()));
byte[] parsed = Base64.decodeBase64(encrypted.getBytes());
//byte[] parsed = DatatypeConverter.parseBase64Binary(encrypted);
byte[] fin = cipher.doFinal(parsed);
String decryptedString = new String(fin);
나 '결과 getBytes()에서 CHARSET을 US-ASCII, UTF-8 및 UTF-16으로 변경하려고 시도했지만이 모든 것은 다음과 같습니다 : 왜곡 된 변화인가? 텍스트
나는 블로킹 모드와 패딩을 사용해 보았지만 js 레벨에서는 실패했다. 지금 당장은 간단한 암호화 방법이 필요합니다.
참고 : 보안 문제를 무시 ... 등 JS에 노출 된 키를 갖는처럼 취급됩니다 그 이후 .. 당신은하지 않는 패딩없이 AES CBC를 사용할 수 없게한다
'VAR 키 = CryptoJS.enc.Hex.parse (공개 키)를 사용하여 문자열에서 WordArray 만들 수 있습니다 확인을',하지만 난 당신'publicKey' (즉'secretKey'하지 않을 것을 가정 ?)는 실제로 32 자의 16 진 문자/16 바이트입니다. 그렇지 않으면 코드가 의미가 없습니다. –
죄송합니다. 해당 줄을 삭제하는 것을 잊어 버렸습니다 (key = CryptoKs.enc.Hex ...). 이전에 시도한 솔루션 중 하나였습니다. – gogogadgetroy