2013-07-29 2 views
2

내가 암호 알고리즘의 전문가가 아니란 말을 시작하겠습니다.CryptoJS (HMAC Sha256)가 잘못된 출력을 제공합니까?

Windows Azure 용 HTTP 헤더를 포맷하는 방법을 구축하려고합니다.이 헤더는 메시지의 일부를 암호화해야합니다. HMAC with SHA256 (또한 base64로 인코딩 됨).

활성 사용자 커뮤니티가 있으므로 CryptoJS을 사용하기로했습니다.

첫째, 내 코드 :

_encodeAuthHeader : function (url, params, date) { 
    //http://msdn.microsoft.com/en-us/library/windowsazure/dd179428 
    var canonicalizedResource = '/' + this.getAccountName() + url; 

    /* 
    StringToSign = Date + "\n" + CanonicalizedResource 
    */ 
    var stringToSign = date + '\n' + canonicalizedResource; 
    console.log('stringToSign >> ' + stringToSign) 

    var encodedBits = CryptoJS.HmacSHA256(stringToSign, this.getAccessKey()); 
    console.log('encodedBits >> ' + encodedBits); 

    var base64Bits = CryptoJS.enc.Base64.stringify(encodedBits); 
    console.log('base64Bits >> ' + base64Bits); 

    var signature = 'SharedKeyLite ' + this.getAccountName() + ':' + base64Bits; 
    console.log('signature >> ' + signature); 

    return signature; 
}, 

방법이 성공적으로 암호화 적절한 조각으로 "서명"을 반환은/인코딩. 그러나 Azure는 형식이 올바르지 않다고 불평합니다.

일부 출력 예 :

stringToSign >> Mon, 29 Jul 2013 16:04:20 GMT\n/senchaazurestorage/Tables 

encodedBits >> 6723ace2ec7b0348e1270ccbaab802bfa5c1bbdddd108aece88c739051a8a767 

base64Bits >> ZyOs4ux7A0jhJwzLqrgCv6XBu93dEIrs6IxzkFGop2c= 

signature >> SharedKeyLite senchaazurestorage:ZyOs4ux7A0jhJwzLqrgCv6XBu93dEIrs6IxzkFGop2c= 

내가 CryptoJS 대안 구현으로서 (SHA256 HMAC와) 동일한 값을 반환하지 않는 것을 알아 차리고하고, 디버깅 고. 예를 들어, 문자열 "2013년 7월 29일 (월) 그리니치 표준시 16시 04분 20초의 \는 N/senchaazurestorage/테이블"는 다음과 같이 나타납니다

  • "6723ace2ec7b0348e1270ccbaab802bfa5c1bbdddd108aece88c739051a8a767"CryptoJS
  • "faa89f45ef029c63d04b8522d07c54024ae711924822c402b2d387d05398fc9f"를 통해 PHP를 통해 hash_hmac ('sha256', ...)

더 깊게 파고 들며, 대부분의 HMAC/SHA265 알고리즘이 PHP에서 출력 ... CryptoJS에서 뭔가 빠졌습니까? 아니면 합법적 인 차이가 있습니까?

+0

더 많은 디버깅 중 ... 내 메시지에서 "\ n"(개행)을 사용하는 것이 CryptoJS를 죽이는 것으로 보입니다. 어떤 아이디어? 나는 Azure가 그것을 요구한다고 생각한다. – arthurakay

답변

0

첫 번째 주석에서 언급 한 것처럼 개행 (​​"\ n")이 문제를 일으켰습니다. 이스케이프 처리 ("\ \ n", inbetween space없이)는 HMAC/SHA256 출력의 불일치를 수정 한 것 같습니다.

Azure HTTP "Authorization"헤더에 여전히 문제가 있습니다.하지만 그 또 다른 문제입니다.

관련 문제