楼主:
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 进行加密