2014-09-16 7 views
3

간단한 암호화 문제로 인해 몇 가지 문제가 있습니다.SHA512가 CryptoJS 및 Closure와 동일하지 않습니다.

나는 다음을 수행 할 :

  • 점점 URL 인코딩 및 base64 인코딩 값
  • 할 URL을 디코딩
  • 할 base64로 디코딩
SHA512로
  • 해시

    CryptoJS에서 작업 할 때 다음 코드를 사용합니다.

    (210)
    var parameter = "Akuwnm2318kwioasdjlnmn"; 
    var urlDecoded = decodeURIComponent(parameter); 
    var base64Decoded = CryptoJS.enc.Base64.parse(urlDecoded); 
    var hashed = CryptoJS.SHA512(base64Decoded).toString(CryptoJS.enc.Base64); 
    //hashed = "UxupkI5+dkhUorQ+K3+Tqct1WNUkj3I6N76g82CbNQ0EAH/nWjqi9CW5Qec1vq/qakNIYeXeqiAPOVAVkzf9mA=="/eWTS2lUgCEe6NJDXhNfYvXMRQDvH6k2PHVmy6LJS7RloVvcQcpVjRNVU5lJpAg==" 
    
    폐쇄로 작업 할 때, 내가 다음 코드를 사용하십시오

    :

    var parameter = "Akuwnm2318kwioasdjlnmn"; 
    var urlDecoded = decodeURIComponent(parameter); 
    var byteArray = goog.crypt.base64.decodeStringToByteArray(urlDecoded); 
    var base64Decoded = goog.crypt.byteArrayToHex(byteArray); 
    var sha512 = new goog.crypt.Sha512(); 
    sha512.update(base64Decoded); 
    var hashed = sha512.digest(); 
    hashed = goog.crypt.byteArrayToHex(hashed); 
    //hashed = "bc2a878edfffb0937fbc6c0f9dbc9566edc59b74080d68d4c8bdfeb4027f17c4316a02285baaf446872d2df37b1144ac3ce18d62ab9c786b1f1fb18a53acea1d" 
    

    그래서, 왜 해시가 다르다?

    누군가 CryptoJS 코드에서 제공하는 것과 동일한 해시를 얻기 위해 Closure-Code를 적용하는 방법을 말해 줄 수 있다면 매우 행복 할 것입니다.

    고맙습니다.

    PS : 나는 또한 시도

    : 당신이 볼로

    var parameter = "Akuwnm2318kwioasdjlnmn"; 
    var urlDecoded = decodeURIComponent(parameter); 
    var base64DecodedByteArray = goog.crypt.base64.decodeStringToByteArray(urlDecoded); 
    var sha512 = new goog.crypt.Sha512(); 
    sha512.update(base64DecodedByteArray); 
    var hashed = sha512.digest(); 
    hashed = goog.crypt.byteArrayToHex(hashed); 
    //hashed = "531ba9908e7e764854a2b43e2b7f93a9cb7558d5248f723a37bea0f3609b350d04007fe75a3aa2f425b941e735beafea6a434861e5deaa200f3950159337fd98" 
    

    하지만, 내가 다른 해시를 얻을. 왜??

  • +0

    매개 변수가 잘못되었다고 언급했기 때문에 업데이트되었습니다. 자, 나는 심지어 세 가지 해시 값을 얻는다. 왜?? – crypton00b

    답변

    6

    첫 번째 해시 값은 16 진수 인코딩 대신 base64 인코딩 된 것을 제외하고는 세 번째 해시 값과 동일합니다. 16 진수 인코딩으로 변경하면 같은 값을 얻을 수 있습니다.

    var hashed = CryptoJS.SHA512(base64Decoded).toString(CryptoJS.enc.Hex); 
    //hashed = "531ba9908e7e764854a2b43e2b7f93a9cb7558d5248f723a37bea0f3609b350d04007fe75a3aa2f425b941e735beafea6a434861e5deaa200f3950159337fd98" 
    

    두 번째 접근법은 동일한 데이터를 해시하지 않기 때문에 다른 값을 갖습니다. 대신 byteArray를 16 진수 문자열로 변환 한 다음 기본 값이 아닌 해당 문자열 표현을 해시합니다.

    +0

    고마워요! 그게 내 문제를 해결 했어 !! – crypton00b

    +0

    각도 2에서 위의 명령문을 실행하는 방법은 무엇입니까? –