看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《HLight (小光,尤加利)》之銘言: : 就我所知, : 一些系統密碼儲存的方式是用加密過的方式儲存, : password_encoded = some_encoder(password); : 儲存在資料庫中的 password_encoded 無法被解碼, : 那麼如果要比較一個人新輸入的密碼 password' 與原來的密碼 password 是否相同, : 是利用這兩個密碼加密以後的資料是否相同做確認, : password'_encoded = some_encoder(password'); : if(password_encoded == password'_encoded) pass the password check. : 像 unix 系統就有提供系統呼叫可以做加密的動作, : 可是我並不是在 unix 底下工作, : 所以我想自己寫一個簡便的加密方式, : 我希望的要求是, : 1.很簡單很簡單,盡量可以在十分鐘內可以寫出來的方法, : 2.只要管理者無法一眼就從加密過的密碼看出原來的密碼就好, : 3.加密過的字串可以儲存在資料庫內,(我不曉得資料庫有沒有特殊字元會出狀況) : 當然, : 最好是連程式設計師看到程式都解不出來, : 不過這樣的方法一定很複雜, : 其實不用這麼麻煩, : 只要解密有點麻煩就好了, : 我要防範的又不是什麼超級駭客, : 只是要讓大家覺得密碼管理很安全, : 求個心安罷了。 你要的應該是「不能解密」吧!那就要看你是在什麼環境下做了。 基本上,UNIX 和 win32 都有加密用的 API,你可以直接用類似 DES 的加密方式。 一個簡單的做法,是拿 password 把隨便一段資料連續加密 25 次。這樣就可以得 到一個還不錯的 one-way hash function 了。 或是你也可以自己去找一些 one-way hash function 的程式,應該不難找到。 現在公開世界中最有效的 one-way hash function 應該就是 SHA1 了。到網路上 找一下 source code 應該可以找到。 -- ※ 發信站: 批踢踢實業坊(ptt.twbbs.org) ◆ From: ken.csie.ntu.edu.tw