md5digest d;
{
digestBuilder << user << pwd;
string done = digestBuilder.str();
md5_state_t st;
md5_init(&st);
md5_append(&st, (const md5_byte_t *) done.c_str(), done.size());
md5_finish(&st, d);
}
string computed = digestToString( d );
if ( key != computed ) {
log() << "auth: key mismatch " << user << ", ns:" << dbname << endl;
errmsg = "auth fails";
return false;
}
我們拿帳號密碼算 MD5 當 key 存起來(MD5是單向 hash function)。認證時,我們沒辦法從 MD5 反推帳號密碼,只能用使用者輸入的帳號密碼「重新計算」MD5,如果 key 相同,那就是認證成功。因此就算在不同的 database,只要帳號密碼一樣,算出來的 key 都一樣(或許應該再把 database 的名字加進來算 MD5)。
2012年4月24日 星期二
[C++] 如何儲存帳號密碼
帳號密碼算是蠻私密的資訊(羞),我們該如何存這些東西?可以參考 MongoDB 的實做。mongo / src / mongo / db / security_commands.cpp
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言