[轉錄]Re: [問題] 請問一般程式是用什麼方式儲 …

作者: chmod (chmod)   2011-01-11 14:57:56
※ [本文轉錄自 C_and_CPP 看板 #1DA_k2Lc ]
作者: littleshan (我要加入劍道社!) 看板: C_and_CPP
標題: Re: [問題] 請問一般程式是用什麼方式儲存個資呢?
時間: Tue Jan 11 14:41:03 2011
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 請教各位
: 一隻程式如果要儲存使用者的個人資料 一般都用什麼方式儲存呢
: 假如要儲存使用者密碼
: 我自己是覺得不可能完全不處理就直接寫成text 或是 binary
: 是怕說有人可以竊取到密碼
: 但是我不曉得一般有什麼common approach 去處理這塊
: 加密我也不懂
: 但真的要用加密嗎?
: 還是就存成binary就好.....
: 謝謝
個資這種要隨時做 search 的資料是不需要加密的
加密後你要搜尋比對時還要解密 速度會慢到爆炸
但使用者密碼請一定要加密
如果密碼也用明文去儲存
個資外洩時所造成的傷害絕對是倍數成長的
ex. 使用者的銀行帳戶用了相同的密碼
結果你們的個資外洩很可能造成他的銀行帳戶被盜領
把密碼加密後儲存雖然並不保證100%安全
但至少風險小很多
我不知道台灣的法律是否有規定這一塊
但個人是認為應該明令規定線上服務的使用者密碼不得明文儲存才對
回到原題
密碼通常是用 one-way hash 去加密儲存的:
ex.
使用者輸入 hello 作為密碼

程式使用 md5 演算法對字串 "hello" 計算 hash

在檔案中儲存 "5d41402abc4b2a76b9719d911017c592"

使用者輸入了密碼 X 試圖登入系統

同樣使用 md5 演算法對 X 計算 hash

檢查算出來的 hash 是否剛好等於 "5d41402abc4b2a76b9719d911017c592"
md5 是滿常用的 one-way hash
這類 one-way hash 通常滿足以下的特性:
1. 相同的字串一定會計算出相同的 hash 結果
2. 不同的字串計算出相同的 hash 機率極低
3. 就算知道 hash 結果,要推算原密碼也極為困難
前面兩項特性使得使用者設定密碼後
只有知道密碼的人才能登入
第三項特性則是保護密碼
即使有人竊取到 "5d41402abc4b2a76b9719d911017c592" 這個字串
他也很難推算出本來的密碼 "hello"
md5 算是相當常用的 one-way hash
現成的 library 也相當多
但實際上 md5 並非無法破解
目前已有許多利用 md5 hash collision 偽造數位簽名的案例
如果你的密碼資料非常重要
可以考慮改用 SHA-2 進行加密
作者: littleshan (我要加入劍道社!)   2011-01-11 14:43:00
po完才發現樓上比較完整,可是我又不能自刪!囧
作者: chmod (chmod)   2011-01-11 14:45:00
狂推 樓上和這層樓都應該要加精華區才對
作者: nowar100 (拋磚引玉)   2011-01-11 14:52:00
都不錯阿 但是不跟語言扯上點邊 這樣我很難做人耶 :|
作者: chmod (chmod)   2011-01-11 14:55:00
轉到資安版好了轉到這...... OK嗎???
作者: ldwang (地瓜)   2011-02-22 14:46:00
看得很高興~

Links booklink

Contact Us: admin [ a t ] ucptt.com