2012-10-24 4 views
5

RC4로 암호화 된 문자열을 생성하는 php 함수가 있습니다. 노드를 사용하여 문자열을 디코드하고 싶습니다. 이상적으로는 내장 된 Crypto 모듈을 사용하는 것입니다. 그러나 나는 그렇게 할 수 없다 - 나는 빈 문자열을 얻는다.RC4가있는 NodeJS Crypto는 공백을 만듭니다.

PHP 코드는 여기 http://code.google.com/p/rc4crypt/

내 JS 코드는 내가 어떤 출력을 얻을하지 않습니다

crypto = require('crypto'); 
decipher = crypto.createDecipher("rc4", "MY SECRET KEY"); 
text = "HELLO"; 
decrypted = decipher.update(text, "utf8", "hex"); 
decrypted += decipher.final("hex"); 
console.log(decrypted); 

입니다. 내 OpenSSL 구현에 openssl list-message-digest-algorithms을 사용하는 RC4가 있는지 확인했습니다.

OSX 10.8, 최신 노드입니다.

다른 모듈을 사용하여 암호 해독 할 수 있습니다. cryptojs 모듈을 사용해 보았지만 RC4를 시도 할 때 오류를 발생 시켰습니다. 저는 믿습니다 - - MD5 해시 대신 원료 사용

감사

답변

4

그렇지 않으면 키가

먼저 하나가 crypto.createDecipheriv를 사용해야합니다 그것을 알아 냈다.

두 번째로 입력 인코딩 mut를 binary로 설정하십시오.

셋째 - 내 경우에는 내가 하드 코딩 된 문자열 대신 POST 데이터를 처리하고 있었고, 난 그것을 URLDECODE했다 - decodeURIComponent()를 질식 jsut - + 표시의 제거와 않았지만 언 이스케이프() 트릭 예 :

var text = unescape((response.post.myvar + '').replace(/\+/g, '%20')) 

var crypto = require('crypto'); 
decipher = crypto.createDecipheriv("rc4", key, '');  
decrypted = decipher.update(text, "binary", "utf8"); 
decrypted += decipher.final("utf8"); 
console.log(decrypted);