我目前正在構建一個基本的認證系統,並且我有一個用戶激活功能,它生成一個20字符長的字符串並將其編碼爲sha1
,但是我看到了一些其他系統使用base64_encode
可以請別人解釋什麼更好,爲什麼?哪一個更好的編碼激活散列,sha1或base64_encode
謝謝
我目前正在構建一個基本的認證系統,並且我有一個用戶激活功能,它生成一個20字符長的字符串並將其編碼爲sha1
,但是我看到了一些其他系統使用base64_encode
可以請別人解釋什麼更好,爲什麼?哪一個更好的編碼激活散列,sha1或base64_encode
謝謝
你可以放棄編碼/散列字符串的想法,並使用openssl_random_pseudo_bytes生成一個字符串,然後使用它。
echo bin2hex(openssl_random_pseudo_bytes(10));
輸出示例:
[email protected]:/var/www# php openssl.php
67b206be9ceef1c4974f
[email protected]:/var/www#
你剛剛給了我一個好主意,並確認了一些我不確定的事情,謝謝 – Side 2013-03-12 17:12:42
,他們有很大的不同 - SHA1
是單向散列函數,這意味着你不能去從編碼字符串返回到原始字符串。但是,base64_encode
是一種雙向編碼功能,這意味着您可以使用base64_decode
返回原始值。
安全方面,這意味着任何能夠獲得價值的人都可以很容易地對其進行解碼,而價值需要蠻力和很多時間。
您正在生成一串隨機字符。沒有一種編碼或哈希可能會給你帶來任何好處。
sha1
將使字符串更短,並使其(非常非常輕微)更容易猜測所需的字符串。
base64
會使字符串變長,並使其更有可能使換行將破壞您將其注入的任何URL。
sha1是40個字符,不能少於20個。而且,base64平均比原始字符串增加了33%。 – 2013-03-12 17:14:55
哪些數據是在 「20個字符的長字符串」?如果它只是一個隨機字符串,除了長度之外沒有區別,僅使用20個字符的字符串就沒有真正的區別/安全性。 – 2013-03-12 17:05:38
請參閱http://stackoverflow.com/q/549/1741542 – 2013-03-12 17:08:43