2012-09-24 3 views
5

CryptoJS로 암호화하려고 시도한 값이있는 JSON 배열의 배열이 있습니다.이 값은 사용자가 지정한 암호를 사용하여 암호를 해독해야하는 다른 파일에서 사용하기 위해 인쇄됩니다.내 CryptoJS 암호화/암호 해독이 작동하지 않습니다.

하지만 뭔가 잘못하고 있는데 URL의 암호를 해독 할 때 "Uncaught Error : Malformed UTF-8 data"가 나타납니다.

encrypt.js :

var encrypted = CryptoJS.AES.encrypt(item[key], pass); 
json[j] += encrypted.ciphertext.toString(CryptoJS.enc.Base64); 

decrypt.js는 :

var decrypted = CryptoJS.AES.decrypt(item[key], pass); 
html += '<a href="' + decrypted.toString(CryptoJS.enc.Utf8) + '" target="_blank" class="socialico ' + key + '">' + icons[key] + '</a>'; 

나는 꽤 ... 도움말을 this 예를하시기 바랍니다 다음에?

답변

11

이 오류 메시지는 일반적으로 데이터가 올바르게 암호 해독되지 않았 음을 의미하며 그 결과 일반 텍스트 바이트는 유효한 UTF-8 문자를 형성하지 않습니다. ,

  • 먼저 암호화 및 암호 해독에 동일한 비밀번호를 사용하고 있는지 확인 :

    몇 가지 확인합니다. 해독을 위해 암호를 사용하기 전에 사용자가 올바른 암호를 제공했는지 확인할 수 있도록 올바른 암호의 해시를 유지해야 할 수 있습니다.

  • 두 번째로, 암호화하기 전에 item[key] 값이 문자열인지 확인하십시오. CryptoJS는 JSON 객체를 암호화 할 수 없습니다. 먼저 직렬화해야합니다.
+0

관심을 가져 주셔서 감사합니다. 나는 두 파일에서 같은'var pass = 'something'을 사용했고 모든 항목에 대해'console.log (typeof (item [key]) == 'string')'이 true를 출력했다. – Viktor

+6

Ahh. 다른 가능한 문제를 발견했습니다. 암호화 중에 사용 된 것과 동일한 IV를 해독에 사용해야합니다. 일반적으로 IV는 암호문과 함께 직렬화되지만 IV가없는 암호문 만 명시 적으로 저장하고 있습니다. 'encrypted.ciphertext.toString (CryptoJS.enc.Base64)'를'encrypted.toString()'으로 바꾸어보십시오. –

+0

오, 고마워요! 나는'ciphertext'와'Base64'를 제거하고 이제는 작동하는 것 같습니다. 이제는 JavaScript 만 사용하여 매우 안전한 웹 페이지를 만들었습니다! 꽤 예쁘다. – Viktor

관련 문제