binary를 base64한것을 decode하고 싶습니다..
글쓴이: pogusm / 작성시간: 금, 2011/01/14 - 12:35오후
HTTP digest authentication 공부중
서버에서 nonce="R73tRsOZBAA=0566d05916f7b49323cfe0ca44ae8fa83654050d" 값을 비표로 생성하는것을 확인하였습니다.
mod_auth_digest.c 라는 이름의 아파치 소스파일을 훑어본결과
R73tRsOZBAA= 은 time-stamp값을 갖는 구조체를 apr_base64_encode_binary(); 라는 함수로 인코딩한것 같고,
0566d05916f7b49323cfe0ca44ae8fa83654050d 이것은 time-stamp값을 포함한 sha1해쉬 값인것 같습니다.
근데 c/c++도 잘할줄 모르고 apr_base64_decode_binary 사용할줄도 모르는데,
R73tRsOZBAA= 값이 어떻게 생겨먹은값인지 궁금합니다..
binary라는게 가장 큰 문제인데.. decode하는 방법이라든지, 결과값이라든지 좀 알려주시면 고맙겠습니다.
Forums:
[bushi@rose nfs_gingerbread]$
무슨 데이타인지는 모르겠습니다.
답변 정말 고맙습니다.
time-stamp로써
1263929285.015273 이거나
1263929285 같은 정보를 표현한것이라고 예상하고 있습니다만...
저로써는
0000000: 47 bd ed 46 c3 99 04 00 값이 과연 time-stamp가 맞는지 아닌지 잘 모르겠네요..
혹, bushi님께서 보시기에 저 값이 time-stamp값이 맞는거 같아 보이시나요?
참고로 mod_auth_digest.c 내용을 대충 올려보면 (저는 C를 잘 모릅니다)
typedef union time_union {
apr_time_t time;
unsigned char arr[sizeof(apr_time_t)];
} time_rec;
time_rec t;
apr_base64_encode_binary(nonce, t.arr, sizeof(t.arr))
대략 저런 과정을 통해 생성된 nonce의 값이 "R73tRsOZBAA=" 가 된거 같습니다.
감사합니다.
첫 4바이트가 time_t 값이라면
다음과 같이 나오는군요..
의미있는 정보인가요?
답변감사합니다
오늘 테스트하고 오늘 생성된 값이라
2011. 01. 14. (금) xx:xx:xx 쯤이어야 하는데...
어쨌든, base64decode 부터 date 명령어까지 해석해가는 방법을 알게 된것만으로도 충분히 큰 도움이 되었습니다.
소스코드를 좀더 차근차근 분석해보면서 여러가지 시도를 해봐야 할것 같네요.
도와주셔서 고맙습니다.
[추가자답]
ANSI C에서 제공하는 time_t 데이터형은 long으로 선언되어 있고, 이는 "1970년 1월 1일 0시 0분 0초" 부터 지나온 초값을 가집니다.
대부분의 컴파일러가 long형을 32비트 즉 4바이트로 정하고 있으므로 부호있는 long형의 제일 큰값인 0x7FFFFF(2147483647) 값으로 표현할 수 있는 최대의 시간은 "2038년 1월 19일 12시 14분 07초"입니다.
반면 APR(Apache Portable Runtime)에서는 사용되는 시간 데이터형인 apr_time_t는 8바이트(64비트)정수라고 합니다.
"1970년 1월 1일 0시 0분 0초" 부터 지나온 마이크로초(1000000분의 1초)값을 갖습니다.
부호있는 64비트 정수로 표현할 수 있는 최대값인 0x7FFFFFFFFFFFFFFF(576460752303423487)은 약 18279년 정도 인데, 실제로 APR에서 apr_time_t은 이 시간을 모두 사용할 수 있는 것은 아니고 "9999년 12월 31일 23시 59분 59초 999999마이크로초"에 해당하는 값인 0x0384440541429BFF(253402268399999999)까지 사용할 수 있습니다.
참고 : http://www.nicklib.com/bbs/board.php?bo_table=bbs_lecture&wr_id=49&page=2
위를 근거로 "47 bd ed 46 c3 99 04 00" 가 뜻하는 값을 계산해보았습니다.
예상했던대로, 2011년 1월 14일 (금) 09:11:34 값이 나왔습니다.
댓글 달기