[javascript] node.js에서 문자열의 sha1 해시를 어떻게 얻을 수 있습니까?

node.js로 작성된 websocket 서버를 만들려고합니다.

서버가 작동하도록하려면 문자열의 SHA1 해시를 가져와야합니다.

내가해야 할 일은 문서의 섹션 5.2.2 페이지 35에 설명되어 있습니다.

참고 : 예를 들어 "Sec-WebSocket-Key"
클라이언트 핸드 셰이크 의 헤더 값이 "dGhlIHNhbXBsZSBub25jZQ=="이면 서버는 "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"문자열을 추가 하여 문자열을 형성합니다 "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11". 그러면 서버는이 문자열의 SHA-1 해시를 가져와 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea 값을 제공합니다. 이 값은 헤더에 "s3pPLMBiTxaQ9kYGzzhZRbK+xOo="반환되는 값을 제공하기 위해 base64로 인코딩 "Sec-WebSocket-Accept"됩니다.



답변

crypto.createHash()기능 및 관련 hash.update()hash.digest()기능을 참조하십시오 .

var crypto = require('crypto')
var shasum = crypto.createHash('sha1')
shasum.update('foo')
shasum.digest('hex') // => "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"


답변

필수 : SHA1이 손상 되었습니다. 45,000 USD에 대해 SHA1 충돌을 계산할 수 있습니다 . 다음을 사용해야합니다 sha256.

var getSHA256ofJSON = function(input){
    return crypto.createHash('sha256').update(JSON.stringify(input)).digest('hex')
}

질문에 답하고 SHA1 해시를 만들려면 :

const INSECURE_ALGORITHM = 'sha1'
var getInsecureSHA1ofJSON = function(input){
    return crypto.createHash(INSECURE_ALGORITHM).update(JSON.stringify(input)).digest('hex')
}

그때:

getSHA256ofJSON('whatever')

또는

getSHA256ofJSON(['whatever'])

또는

getSHA256ofJSON({'this':'too'})

공식 노드 문서 crypto.createHash()


답변

게시물의 댓글에있는 내 조언을 읽고 강력히 고려하십시오. 그래도 그래도 타당한 이유가 있다면 Node 용 암호화 모듈 목록을 확인하세요 . sha1과 base64를 모두 처리하는 모듈이 있습니다.


답변

문제 방지를위한 팁 (잘못된 해시) :

NodeJS가 문자열의 UTF-8 표현을 해싱하는 것을 경험했습니다. 다른 언어 (예 : Python, PHP 또는 PERL …)는 바이트 문자열을 해싱합니다.

이진 인수를 추가 하여 바이트 문자열을 사용할 수 있습니다 .

const crypto = require("crypto");

function sha1(data) {
    return crypto.createHash("sha1").update(data, "binary").digest("hex");
}

sha1("Your text ;)");

“\ xac”, “\ xd1”, “\ xb9”, “\ xe2”, “\ xbb”, “\ x93″등으로 시도 할 수 있습니다.

기타 언어 (Python, PHP, …) :

sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47

Nodejs :

sha1 = crypto.createHash("sha1").update("\xac", "binary").digest("hex") //39527c59247a39d18ad48b9947ea738396a3bc47
//without:
sha1 = crypto.createHash("sha1").update("\xac").digest("hex") //f50eb35d94f1d75480496e54f4b4a472a9148752


답변

당신이 사용할 수있는:

  const sha1 = require('sha1');
  const crypt = sha1('Text');
  console.log(crypt);

설치 :

  sudo npm install -g sha1
  npm install sha1 --save


답변