2013-03-12 67 views
0

我目前正在構建一個基本的認證系統,並且我有一個用戶激活功能,它生成一個20字符長的字符串並將其編碼爲sha1,但是我看到了一些其他系統使用base64_encode可以請別人解釋什麼更好,爲什麼?哪一個更好的編碼激活散列,sha1或base64_encode

謝謝

+0

哪些數據是在 「20個字符的長字符串」?如果它只是一個隨機字符串,除了長度之外沒有區別,僅使用20個字符的字符串就沒有真正的區別/安全性。 – 2013-03-12 17:05:38

+1

請參閱http://stackoverflow.com/q/549/1741542 – 2013-03-12 17:08:43

回答

2

你可以放棄編碼/散列字符串的想法,並使用openssl_random_pseudo_bytes生成一個字符串,然後使用它。

echo bin2hex(openssl_random_pseudo_bytes(10)); 

輸出示例:

[email protected]:/var/www# php openssl.php 
67b206be9ceef1c4974f 

[email protected]:/var/www# 
+0

你剛剛給了我一個好主意,並確認了一些我不確定的事情,謝謝 – Side 2013-03-12 17:12:42

2

,他們有很大的不同 - SHA1是單向散列函數,這意味着你不能去從編碼字符串返回到原始字符串。但是,base64_encode是一種雙向編碼功能,這意味着您可以使用base64_decode返回原始值。

安全方面,這意味着任何能夠獲得價值的人都可以很容易地對其進行解碼,而價值需要蠻力和很多時間。

1

您正在生成一串隨機字符。沒有一種編碼或哈希可能會給你帶來任何好處。

sha1將使字符串更短,並使其(非常非常輕微)更容易猜測所需的字符串。

base64會使字符串變長,並使其更有可能使換行將破壞您將其注入的任何URL。

+0

sha1是40個字符,不能少於20個。而且,base64平均比原始字符串增加了33%。 – 2013-03-12 17:14:55