2014-03-04 2 views
1

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를 사용할 수 없게한다

+0

'VAR 키 = CryptoJS.enc.Hex.parse (공개 키)를 사용하여 문자열에서 WordArray 만들 수 있습니다 확인을',하지만 난 당신'publicKey' (즉'secretKey'하지 않을 것을 가정 ?)는 실제로 32 자의 16 진 문자/16 바이트입니다. 그렇지 않으면 코드가 의미가 없습니다. –

+0

죄송합니다. 해당 줄을 삭제하는 것을 잊어 버렸습니다 (key = CryptoKs.enc.Hex ...). 이전에 시도한 솔루션 중 하나였습니다. – gogogadgetroy

답변

1

암호는 항상 16 바이트입니다. 아마도 좋은 생각 일 수도 있고 아닐 수도있는 일종의 기본 패딩이 적용될 것입니다.

어쨌든 : 키와 iv를 CryptoJS에 WordArray로 전달해야합니다. 문자열을 주면 패스 프레이즈를 부여하고 다른 키를 파생한다고 가정합니다. 따라서 Java 암호 해독 코드는 다른 키/iv 쌍을 사용하게됩니다. 당신은

var key = CryptoJS.enc.Utf8.parse("abcdefghijklmnio") 
var iv = ... 
+0

감사합니다. 내가 wordarray로 전달한 후에 작동했고, 패딩을 추가해야했습니다. 그렇지 않으면 여분의 문자가 추가됩니다. 나는 또한 위의 몇 가지 불필요한 코드를 포함한다는 것을 깨달았다. – gogogadgetroy

관련 문제