다음 문자열이 저장되어 있습니다. 1F의 경우 16 바이트, 끝에 4 개의 nullBytes.
e.g. 1234567890ABCDEF0000
unsigned char input[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x00, 0x00, 0x00, 0x00};
이것의 10 바이트 바이너리를 어떻게 얻습니까?
편집하다:
openssl 암호화 라이브러리의 SHA1 기능을 제대로 사용하려고합니다. 명령 줄에서 "소금"과 "암호"를 읽는 작업이 있습니다.
그런 다음 "salt"+ "|"가되도록 함께 추가합니다. + "비밀번호".
솔트가 전달되지 않으면 솔트는 10 바이트 인 "\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0"입니다. 맞습니까? 하지만 솔트가 전달되면 "1234567890ABCDEF"가 될 수 있습니다.
그런 다음 오른쪽까지 null 바이트로 채워야합니다. 그래서 총 10 바이트를 가지게되지만 "1234567890ABCDEF"는 이미 16 바이트이므로 변환해야합니다. 난 잘 모르겠어, 난 정말 c의 메모리 부분에 어려움을 겪고있어
가장 쉬운 방법은 다음과 같습니다.
0으로 초기화 된 10 바이트 배열을 만듭니다.
unsigned char salt[10] = { 0 };
그런 다음 16 진수를 바이트 단위로 읽습니다 sscanf()
.
sscanf(input, "%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx",
&salt[0], &salt[1], &salt[2], &salt[3], &salt[4],
&salt[5], &salt[6], &salt[7], &salt[8], &salt[9]);
이것은 필요한만큼의 바이트를 변환합니다. 6 자리 16 진수 만 솔트로 지정하면 처음 3 바이트가 채워지고 나머지는 0으로 유지됩니다.
이것은 당신이 기대하는 것을 할 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다