source

Crypt(3) 및 CryptoJ로부터의 다른 출력

factcode 2022. 10. 27. 23:00
반응형

Crypt(3) 및 CryptoJ로부터의 다른 출력s

다음을 사용하여 MariaDB에 비밀번호를 해시하고 있습니다.

ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))

그 결과 다음과 같은 결과가 나타납니다.

$6$3b502db443d64283$BNSYWsf3T0e4xT23GJW/QPpKvzLidio5zk9v7kCE.wk4dtNo4avMzBxvqoWc0Y5ihj/zVwtGCwZRfTFur0BnI1

이 포맷은$6SHA512를 의미합니다.$salt$다음으로 계산된 비밀번호 해시입니다.따라서 계산된 해시만

BNSYWsf3T0e4xT23GJW/QPpKvzLidio5zk9v7kCE.wk4dtNo4avMzBxvqoWc0Y5ihj/zVwtGCwZRfTFur0BnI1

백그라운드에서 crypt(3)를 사용하는 것으로 알고 있습니다.C를 짧게 쓰면 다음과 같습니다.

#define _GNU_SOURCE
#include <crypt.h>
#include <stdio.h>

int main() {
  char * blah = crypt("password", "$6$3b502db443d64283");
  puts(blah);
}

소금과 같은 소금을 넣기 위해 주의한다.RAND()MySQL에 대해 생성되어 추가되는 함수$6SHA512를 사용하면 같은 결과를 얻을 수 있습니다.

$6$3b502db443d64283$BNSYWsf3T0e4xT23GJW/QPpKvzLidio5zk9v7kCE.wk4dtNo4avMzBxvqoWc0Y5ihj/zVwtGCwZRfTFur0BnI1

계산된 해시 자체는 다음과 같습니다.

BNSYWsf3T0e4xT23GJW/QPpKvzLidio5zk9v7kCE.wk4dtNo4avMzBxvqoWc0Y5ihj/zVwtGCwZRfTFur0BnI1

CryptoJS를 사용하여 DB(또는 in - heaven forfend! - C)가 아닌 JS 코드로 해시를 비교하려고 하면 문제가 있음을 알 수 있습니다.예를 들어 CryptoJS 코드는 다음과 같습니다.

var CryptoJS = require('crypto-js');
var SHA512 = require('crypto-js/sha512');
  console.log(SHA512("3b502db443d64283password")).toString();

이 함수는 인수가 1개밖에 없기 때문에 패스워드에 솔트를 추가합니다.결과는 다음과 같습니다.

105865ba5bf0649410927131204a1228260e59e95b1b53942001b98835dca4aedfe7039a00060fdba8531c44c83cd3b7bec4864865915938d2ed7ed477254f61

좋아요, 해쉬드 패스워드의 16진수 부호화라는 걸 알겠네요그럼 부호화를 바꿔서...하지만 뭘로?Base64를 사용해 보겠습니다.

  `console.log(SHA512("3b502db443d64283password")).toString(CryptoJS.enc.Base64);`

출력은 다음과 같습니다.

EFhlulvwZJQQknExIEoSKCYOWelbG1OUIAG5iDXcpK7f5wOaAAYP26hTHETIPNO3vsSGSGWRWTjS7X7UdyVPYQ==

문제가 생기기 시작했어crypt(3)에서 사용되는 인코딩은 base64가 아닙니다.그것은 무엇일까요?man 페이지를 봅니다.

"salt" 및 "encrypted"의 문자는 [a-zA-Z0-9./] 세트에서 가져옵니다.

그래서 저는 다음과 같은 질문을 남겼습니다.

  1. crypt(3)에서 사용되는 부호화는 무엇입니까?표준 문자 집합입니까, 아니면 선택된 문자 집합입니까?

  2. 이렇게 두 개의 다른 문자 집합과 생성된 해시를 비교할 수 있는 방법이 있나요?해시 패스워드를 공유하는 기본적인 표현이 있나요?접속할 수 있나요?

  3. 각 기능이 몇 바퀴를 돌고 있는지 어떻게 알 수 있습니까?소스코드를 조사하지 않고 알 수 있는 방법이 있나요?

  4. CryptoJS를 사용할 때 salt를 첨가한다고 가정하는 것이 맞습니까?

언급URL : https://stackoverflow.com/questions/45590205/different-outputs-from-crypt3-and-cryptojs

반응형