2013-03-14 3 views
8

이것은 이상한 질문입니다. 그러나 저는 지금 몇 시간 동안이 작업을 해왔으며 많은 진전을 이루지 못했습니다. 여기에있는 누군가가 조언을 해줄 수 있기를 희망합니다 ...(Not-so) 똑똑한 키가 노드 JS의 SHA512 Hmac에 문제를 일으키고 있습니다

나는 PHP에서 노드로 스크립트를 이식하고 있습니다. 나도 같은 텍스트를 주어진 때이 기능은 동일한 해시를 생산하는 것을 확인했다

var hash = crypto.createHmac("sha512", key); 
hash.update(text); 
return hash.digest("hex"); 

: 나는 암호화 모듈을 사용하여 노드에서이 문제를 재현

hash_hmac('sha512', $text, $key); 

: PHP 스크립트는이 기능을 사용합니다 키.

제외

...

PHP에서 키에 사용되는 문자열이 비슷합니다 : 내가 좋아하는 자바 스크립트에서이 문제를 재현하는 시도

define("SITE_KEY", " 
              __ 
    ,         ,' e`---o 
    ((         ( | ___,' 
    \\~-------------------------------' \_;/ 
    (         /
    /) ._______________________________. ) 
    (((        ((( 
    ``-'        ``-' 

"); 

(묻지 마세요) 그래서 :

var key = "\ 
              __\ 
    ,         ,' e`---o\ 
    ((         ( | ___,'\ 
    \\\\~-------------------------------' \\_;/\ 
    (         /\ 
    /) ._______________________________. )\ 
    (((        (((\ 
    ``-'        ``-'\ 
\ 
"; 

그러나 작동하지 않습니다. (나는 linebreaks와 관련이 있다고 가정한다).

도 작동하지 않습니다 다음과 같이 "\ 연구 \ n을"또는 "\ n"과 줄 바꿈을 교체 :이 문제를 해결하는 방법에 대한

var key = "\r\n           __\r\n  ,         ,' e`---o\r\n ((         ( | ___,'\r\n  \\\\~-------------------------------' \\_;/\r\n  (         /\r\n  /) ._______________________________. )\r\n (((        (((\r\n  ``-'        ``-'\r\n\r\n"; 

제안? (개를 없애는 것은 불행히도 옵션이 아닙니다.)

도움을 주셔서 감사합니다.

+4

이것은 스택 오버플로에 대한 새로운 좋아하는 질문입니다. – Bill

+0

실제 키와 붙여 넣은 키의 차이는 중간에 "긴 개가 길다"라는 실제 키가 있다는 것입니까? – hobbs

+1

당신이 말했듯이 열쇠는 똑같은 것은 아니지만 두 개의 개 사이에는 문자 그대로의 백 슬래시가 다릅니다. PHP에서 개 꼬리 근처의 \\는 하나의 리터럴 백 슬래시로 해석됩니다.개 귀 근처의 \ _는 리터럴 백 슬래시 및 밑줄로 해석됩니다. base64를 사용해보십시오! :-) – MrTrick

답변

3

왜 BASE64 인코딩 된 문자열을 저장하지 않습니까? 그런 식으로 줄 바꿈, 공백, 그런 식으로 걱정할 필요가 없습니다.

PHP 코드 키를 (명백하게) 정확하게, 같은 스크립트를 시도 저장 될 때보고 : 다음, 인코딩 된 키를 복사, 명령 줄에서

<? 
$doggy_key = ....; 
echo base64_encode($doggy_key); 

실행을 당신의 자바 스크립트를 사용합니다. base64 문자열을 디코딩하는 것은 간단한 문제입니다. 예를 들면 다음과 같습니다. Base64 encoding and decoding in client-side Javascript

+0

만세! 그랬어. 감사! – user1031947

0

JS 버전에서 PHP 버전의 모든 개행을 \n (개행 없음)으로 바꾸어보십시오. 작동하지 않는 경우 모두 \r\n으로 바꾸십시오. PHP가 Windows 형식 소스에서 여러 줄의 리터럴을 번역하지 않을 것입니다.

+0

감사합니다 - 나는 이미 그것을 시도하고, 불행히도 그것도 작동하지 않았다. 나는이 점을 언급하기 위해 나의 질문을 업데이트 할 것이다. – user1031947

1

필자가 아는 바로는 원래 문자열에는 줄 바꿈이 없습니다. 끝에있는 백 슬래시는 PHP에 다음 줄이 이전 줄의 연속임을 알립니다. 내가 맞는지 아닌지를 테스트하기 위해 문자열을 출력하고 줄 바꿈이 있는지 확인하기 위해 PHP를 얻을 수 있습니다. 하지만 Javascript에서 긴 문자열이나 조인 된 문자열로이 코드를 작성할 수 있습니다.

관련 문제