Crypt(3) 및 CryptoJ로부터의 다른 출력s
다음을 사용하여 MariaDB에 비밀번호를 해시하고 있습니다.
ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))
그 결과 다음과 같은 결과가 나타납니다.
$6$3b502db443d64283$BNSYWsf3T0e4xT23GJW/QPpKvzLidio5zk9v7kCE.wk4dtNo4avMzBxvqoWc0Y5ihj/zVwtGCwZRfTFur0BnI1
이 포맷은$6
SHA512를 의미합니다.$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에 대해 생성되어 추가되는 함수$6
SHA512를 사용하면 같은 결과를 얻을 수 있습니다.
$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./] 세트에서 가져옵니다.
그래서 저는 다음과 같은 질문을 남겼습니다.
crypt(3)에서 사용되는 부호화는 무엇입니까?표준 문자 집합입니까, 아니면 선택된 문자 집합입니까?
이렇게 두 개의 다른 문자 집합과 생성된 해시를 비교할 수 있는 방법이 있나요?해시 패스워드를 공유하는 기본적인 표현이 있나요?접속할 수 있나요?
각 기능이 몇 바퀴를 돌고 있는지 어떻게 알 수 있습니까?소스코드를 조사하지 않고 알 수 있는 방법이 있나요?
CryptoJS를 사용할 때 salt를 첨가한다고 가정하는 것이 맞습니까?
언급URL : https://stackoverflow.com/questions/45590205/different-outputs-from-crypt3-and-cryptojs
'source' 카테고리의 다른 글
네이티브 테이블 'performance_schema'.--?'는 잘못된 구조를 가지고 있습니다. (0) | 2022.10.27 |
---|---|
C의 _Bool 타입과 Bool 타입의 차이? (0) | 2022.10.27 |
볼륨을 마운트할 때 mariadb를 실행할 수 없습니다. (0) | 2022.10.27 |
Python의 산술 평균(평균의 한 종류) 계산 (0) | 2022.10.27 |
비동기 콜에서 응답을 반환하려면 어떻게 해야 하나요? (0) | 2022.10.27 |