binary를 base64한것을 decode하고 싶습니다..

pogusm의 이미지

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하는 방법이라든지, 결과값이라든지 좀 알려주시면 고맙겠습니다.

bushi의 이미지

[bushi@rose nfs_gingerbread]$ echo "R73tRsOZBAA=" | base64 -d | xxd -g 1
0000000: 47 bd ed 46 c3 99 04 00                          G..F....
[bushi@rose nfs_gingerbread]$ 
[bushi@rose nfs_gingerbread]$ echo "R73tRsOZBAA=" | base64 -d | file -
/dev/stdin: data
[bushi@rose nfs_gingerbread]$

무슨 데이타인지는 모르겠습니다.
pogusm의 이미지

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=" 가 된거 같습니다.

감사합니다.

pastime의 이미지

다음과 같이 나오는군요..

$ date -d@$(printf %d 0x46edbd47)
2007. 09. 17. (월) 08:33:27 KST

의미있는 정보인가요?

pogusm의 이미지

오늘 테스트하고 오늘 생성된 값이라
2011. 01. 14. (금) xx:xx:xx 쯤이어야 하는데...

어쨌든, base64decode 부터 date 명령어까지 해석해가는 방법을 알게 된것만으로도 충분히 큰 도움이 되었습니다.

소스코드를 좀더 차근차근 분석해보면서 여러가지 시도를 해봐야 할것 같네요.

도와주셔서 고맙습니다.

pogusm의 이미지

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" 가 뜻하는 값을 계산해보았습니다.

# vim time01.c
#include <stdio.h>
#include <apr-1/apr_time.h>
 
int main(int argc, char *argv[])
{
    apr_time_t  now, temp;
    char str_ctime[APR_CTIME_LEN];
 
    now = apr_time_now();
 
    apr_ctime(str_ctime, now);
    printf("%ld : %lx : %s\n", now, now, str_ctime);
 
    // 47 bd ed 46 c3 99 04 00
    temp = 0x000499c346edbd47;
 
    apr_ctime(str_ctime, temp);
    printf("%ld : %lx : %s\n", temp, temp, str_ctime);
 
    return 0;
}
 
# gcc -o time01 time01.c -L/usr/lib64 -lapr-1
# ./time01
1295033444654647 : 499d37870de37 : Sat Jan 15 04:30:44 2011
1294963894500679 : 499c346edbd47 : Fri Jan 14 09:11:34 2011

예상했던대로, 2011년 1월 14일 (금) 09:11:34 값이 나왔습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.