轉(zhuǎn)載:http://blog.csdn.net/happylee6688/article/details/43965609
簡介
SHA 同樣也是一個系列,它包括 SHA-1瘪弓,SHA-224垫蛆,SHA-256,SHA-384腺怯,和 SHA-512 等幾種算法袱饭。其中,SHA-1呛占,SHA-224 和 SHA-256 適用于長度不超過 2^64 二進制位的消息虑乖。SHA-384 和 SHA-512 適用于長度不超過 2^128 二進制位的消息。
后面的224,256,384主要是代表了最后生成的消息摘要的位長度
乍一說 SHA 你可能不知道晾虑,但說到散列和散列算法疹味,你一定會知道仅叫,也就是平常所指的 Hash。
SHA糙捺,全稱為“Secure Hash Algorithm”诫咱,中文名“安全哈希算法”,主要適用于數(shù)字簽名標準(Digital Signature Standard DSS)里面定義的數(shù)字簽名算法(Digital Signature Algorithm DSA)洪灯。對于長度小于 2^64 位的消息坎缭,SHA1 會產(chǎn)生一個 160 位的消息摘要。也就是20個字節(jié)签钩,最終轉(zhuǎn)成16進制的字符串的時候會生成40個字符掏呼。
SHA-256會產(chǎn)生32字節(jié),也就是256位
特點
- 不可以從消息摘要中復(fù)原信息
- 兩個不同的消息铅檩,不會產(chǎn)生同樣的消息摘要
原理
SHA 將輸入流按照每塊 512 位(64 個字節(jié))進行分塊憎夷,并產(chǎn)生 20 個字節(jié)的被稱為信息認證代碼或信息摘要的輸出。
該算法輸入報文的長度不限柠并,產(chǎn)生的輸出是一個 160 位的報文摘要岭接。輸入是按 512 位的分組進行處理的。SHA-1 是不可逆的臼予、防沖突鸣戴,并具有良好的雪崩效應(yīng)。
MD5和SHA的比較
因為二者均由 MD4 導(dǎo)出粘拾,SHA-1 和 MD5 彼此很相似窄锅。相應(yīng)的,他們的強度和其他特性也是相似缰雇,但還有以下幾點不同:
對強行攻擊的安全性
最顯著和最重要的區(qū)別是 SHA-1 摘要比 MD5 摘要長 32 位入偷。使用強行技術(shù),產(chǎn)生任何一個報文使其摘要等于給定報摘要的難度對 MD5 是 2^128 數(shù)量級的操作械哟,而對 SHA-1 則是 2^160 數(shù)量級的操作疏之。這樣,SHA-1 對強行攻擊有更大的強度暇咆。
對密碼分析的安全性
由于 MD5 的設(shè)計锋爪,易受密碼分析的攻擊,SHA-1 顯得不易受這樣的攻擊爸业。
速度
在相同的硬件上其骄,SHA-1 的運行速度比 MD5 慢。
java demo
MessageDigest md = MessageDigest.getInstance("SHA1");//也可以是SHA-256等
md.update("kkk".getBytes());
byte[] digest=md.digest();
StringBuffer buffer = new StringBuffer();
for (byte oneB : digest) {
String str = Integer.toHexString(oneB & 0xff);
if (str.length() == 1) {
str="0"+str;
}
buffer.append(str);
}
System.out.println(buffer.toString());