node.js에 있는 문자열의 sha1 해시를 어떻게 얻을 수 있습니까?
node.js로 작성된 웹 소켓 서버를 만들려고 합니다.
서버를 작동시키려면 문자열의 SHA1 해시를 가져와야 합니다.
제가 해야 할 일은 문서의 섹션 5.2.2 페이지 35에 설명되어 있습니다.
참고: 예를 들어, 값이
"Sec-WebSocket-Key"
고객의 악수에서 헤더는"dGhlIHNhbXBsZSBub25jZQ=="
서버가 문자열을 추가합니다."258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
끈을 형성하다"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
그런 다음 서버는 이 문자열의 SHA-1 해시를 사용하여 값을 0xb30x7a 0x4f 0x2c 0xc00x620x4f 0x160x900f 60x460xcf 0x380x590x450xb20xb20을 0xc4 0xea로 지정합니다.이 값은 다음 값을 제공하기 위해 base64 인코딩됩니다."s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
그것은 다음에 반환될 것입니다."Sec-WebSocket-Accept"
표제의
기능 및 관련 및 기능을 참조하십시오.
var crypto = require('crypto')
var shasum = crypto.createHash('sha1')
shasum.update('foo')
shasum.digest('hex') // => "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
의무: SHA1이 고장났습니다. SHA1 충돌을 45,000달러에 계산할 수 있습니다(이 답변이 작성된 이후로 더 저렴합니다).사용해야 합니다.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'})
나는 그 노드를 경험했습니다.JS는 문자열의 UTF-8 표현을 해시하고 있습니다.다른 언어(예: Python, PHP 또는 PERL...)는 바이트 문자열을 해시합니다.
Python/PHP와 동일한 해시를 얻기 위한 팁, ...:
바이트 문자열을 사용하기 위해 이진 인수를 추가할 수 있습니다(이 인코딩은 충돌 가능성을 증가시키지만 다른 언어와 호환됩니다).
const crypto = require('crypto')
function sha1(data) {
return crypto.createHash('sha1').update(data, 'binary').digest('hex')
}
text = 'Your text and symbol \xac'
console.log(text, ':', sha1(text))
"\xac", "\xd1", "\xb9", "\xe2", "\xbb", "\x93" 등으로 시도할 수 있습니다.
기타 언어(파이썬, PHP, ...):
sha1('\xac') //39527c59247a39d18ad48b9947ea738396a3bc47
노드js:
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
당신의 게시물의 댓글에 제 조언을 읽고 적극적으로 고려해주시기 바랍니다.그렇긴 하지만, 그래도 그럴 만한 이유가 있다면 노드에 대한 이 암호화 모듈 목록을 확인하십시오.sha1과 base64를 모두 처리하기 위한 모듈이 있습니다.
Node v15에 추가된 새로운 브라우저 호환 제로 의존성 SubentCrypto API를 사용하여 답변합니다.
const crypto = this.crypto || require('crypto').webcrypto;
const sha1sum = async (message) => {
const encoder = new TextEncoder()
const data = encoder.encode(message)
const hashBuffer = await crypto.subtle.digest('SHA-1', data)
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
return hashHex;
}
sha1sum('foo')
.then(digestHex => console.log(digestHex))
// "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
노드 샌드박스: https://runkit.com/hesygolu/61564dbee2ec8600082a884d
출처:
- https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string
- https://nodejs.org/api/webcrypto.html#webcrypto_class_subtlecrypto
언급URL : https://stackoverflow.com/questions/6984139/how-can-i-get-the-sha1-hash-of-a-string-in-node-js
'programing' 카테고리의 다른 글
구문 오류 또는 액세스 위반: 1064, LEFT JOIN 조건의 구문 오류 (0) | 2023.08.14 |
---|---|
오라클에서 if(조건, 그렇다면, 그렇지 않으면) (0) | 2023.08.14 |
GATER_PLAN_STATISTICS가 기본 계획 통계를 생성하지 않습니다. (0) | 2023.08.14 |
PHP는 null을 0과 동일하게 간주합니다. (0) | 2023.08.14 |
각도가 있는 로케일 "XXX"에 대한 로케일 데이터가 누락됨 (0) | 2023.08.09 |