2017-12-15 32 views
-2

아래와 같이 JavaScript에서 JSON을 암호화하려고 시도했으며 암호화되어 있습니다. 아래의 "obj"는 JSON 데이터이며 "ency_key"이유를 모르겠습니다. Google에서 문자열을 전달한 곳에서이 항목을 따랐습니다.javax.crypto.BadPaddingException : 최종 블록이 적절하게 채워지지 않은 경우 예외

var obj1 = CryptoJS.AES.encrypt(obj,'ency_key').toString(); 
$.ajax({ 
    url: "web/enyDcyData", 
    "type": "POST", 
    async:true, 
    data:{ 
     json:obj1, 
    } 

하지만 암호를 해독 할 수없는 java에서 아래처럼 시도했습니다. 오전 을 얻고 있습니다. javax.crypto.BadPaddingException : 최종 블록이 올바르게 채워지지 않았다고 가정하면 예외는 입니다. "doFinal (base64Decode (ency_data));" 제가 실수를 저질렀습니다. 제발이 문제를 해결하도록 도와주세요.

public static String decrypt(String ency_data) 
     SecretKeyFactory keyFac = SecretKeyFactory.getInstance(one); 
     SecretKey seckey = keyFac.generateSecret(new PBEKeySpec(two)); 
     Cipher cipher = Cipher.getInstance(one); 
     pbeCipher.init(Cipher.DECRYPT_MODE, seckey , new PBEParameterSpec(SALT, 20)); 
     byte[] res = cipher.doFinal(base64Decode(ency_data)); 
     String decryptedValue = new String(res,"UTF-8"); 
    } 

     private static byte[] base64Decode(String ency_data) throws IOException { 
      return new BASE64Decoder().decodeBuffer(ency_data); 
     } 
+1

_ "자바에서 다른 방법을 시도했지만 다른 오류가 발생했습니다."_ 그 다음에는 그 중 하나 이상을 보여줍니다. – Andreas

+0

JavaScript 측에서 어떤 키가 사용되고 있는지 알지 못하는 것 같습니다. , 당신은 자바 측의'keyFac.generateSecret()'에서 같은 키를 얻었는지 여부를 확인할 수 없다. 나는 암호화 문제를 묻는 기본적인 전제 조건은 자바 측에서 암호화를 위해 사용하는 키가 자바 측에서 해독하기 위해 사용하는 키와 동일한 지 확인하는 것입니다. 귀하의 결과물은 다른 열쇠 (다른 많은 오류들과 함께)를 사용하는 것과 일치합니다 ... 당신이 그것을 배제 할 수 없다면, 우리는 당신을 정말로 도울 수 없습니다. '하나'가 AES를 선택합니까? – lockcmpxchg8b

답변

1

사용중인 키 파생 기능이 다릅니다. CryptoJS (버전 3)는 OpenSSL 호환 키 유도 함수를 사용하지만 PBKDF1 (또는 2 일 수도 있고 알고리즘은 포함되지 않음)을 사용하고 있습니다. EVP_BytesToKey의 구현을 찾아야 할 수도 있습니다 (예 : here. 물론 전체 OpenSSL 호환성 레이어를 찾을 수도 있습니다.

키 또는 데이터가 다른 경우 CBC/ECB 모드에 대해 패딩 오류가 발생해야합니다. 데이터 크기가 블록 크기의 배수이고 키/알고리즘이 인스턴스화/초기화 작업 동안 허용 된 경우에만 throw 될 수있는 유일한 오류입니다.