2012-01-19 54 views
0

我正在開發一個大型應用程序,當數據在不同大陸的兩臺計算機之間傳輸時,我需要加密。我從來沒有加密過。我想要一個簡單的加密,可以在沒有任何依賴的情況下在PHP/Ruby/Python中處理。使用SHA1加密

所以我決定使用HMAC SHA1。

$pad=hash_hmac("sha1","The quick brown....","mykey"); 

這是我在互聯網上的一些研究後發現的。

如果有人不知道密鑰,它有多難解密?此外,有什麼替代方法呢?

更新 - 感謝所有的答覆。問題解決了。

+2

這是一個散列,而不是密碼:如果不經過所有可能性並檢查它們,您就無法解密它! – Xophmeister

回答

5

即使您知道密鑰,也無法將其解密。 HMAC SHA1是密鑰散列算法,不是加密。

哈希是一種加密單向函數,無論輸入的長度如何,總是會生成一個相同長度的值(我認爲SHA1是128位)。散列的一點是,給定輸出值,找到一個輸入值來產生輸出在計算上是不可行的。密鑰散列用於防止彩虹表攻擊。即使你知道密鑰,你也不能顛倒散列過程。

加密你想看看AES。

+0

SHA1是160位長(無論輸入大小) – poupou

+0

感謝poupou。我知道我應該看看那個。 –

-2

正如我所說,這是一個散列,所以不是加密/解密問題。如果你想實現一個簡單的加密算法,我會建議研究XOR加密。如果密鑰足夠長(比消息長)並且密鑰共享策略適當安全,則這是一次性密碼;否則,可能會使用統計分析來破壞它。

+0

-1用於在一般安全問題上建議XOR加密(對不起) –

+0

爲什麼?我知道這不是最好的,但考慮到OP試圖使用SHA1哈希來加密數據,我認爲易於理解和實現算法將是一個開始學習的好地方。 – Xophmeister

+0

@owlstead - 假設優質,高質量的非重複密鑰材料流,XOR很好。這基本上是RC4的工作方式。主要的問題是獲得足夠高熵的關鍵數據流,以便有用,並且能夠使用相同的材​​料。這就是說我已經給出了這個答案-1來暗示OP實現他自己的加密算法。衆所周知,加密難以正確進行,即使使用已知的算法實現細節也會導致缺陷。使用現有的成熟的圖書館會更好。 –

1

SHA1是一種單向散列函數,根據定義,它不能被任何人解密。問題就在於你是否有一個明文T到H的哈希值。找到另一個T到H的哈希值有多難。

根據維基百科的說法,對於SHA1,最有名的蠻力攻擊需要2^51 evlautions找到一個匹配的純文本。

如果您需要真正的加密方法,您可以在這裏逆轉過程,那麼您應該查看AES256。

請參見: http://en.wikipedia.org/wiki/Cryptographic_hash_function

有關此進行了一般性討論。

1

像安德魯說的那樣SHA1是一種散列算法,不能用於加密(因爲你無法取回原始值)。它產生的摘要可用於驗證數據的完整性。

HMAC是一個哈希算法之上的一個構造,它接受一個密鑰。然而,它不是爲了加密(同樣不能解密),而是允許你使用簽名數據,即使用相同的密鑰,你將能夠確保數據在傳輸過程中不被篡改。

敵人加密,你應該看看使用AES或,如果適用於您的應用程序,HTTPS(這將解決更多的問題比你想了解;-)

0

SHA-1,MD-5都單向哈希算法。 他們只是生成一個冗長的字符串。每個字符串受到這些函數的處理時都會產生一個冗長的字符串,這個字符串不能被保留下來。

他們遠離加密。

如果您正在尋找加密算法,請使用AES(高級加密標準),DES(數據加密標準)算法。