SHA1 - Java加密与安全
生活随笔
收集整理的這篇文章主要介紹了
SHA1 - Java加密与安全
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SHA-1算法SHA-1算法也是一種哈希算法,他的輸出是160bits,也就是20個字節(jié),SHA-1是由美國安全局開發(fā)的,這個SHA-1算法 發(fā)布以后發(fā)現(xiàn)有問題,所以才作廢了,這個作廢的版本叫做SHA-0,以后發(fā)布的版本叫做SHA-1,緊接著又發(fā)布了SHA-256,和SHA-512版本
我們來比較一下SHA-1的輸出長度是160位,也就是20個字節(jié),SHA-256輸出長度是256位,也就是32個字節(jié),SHA-512輸出長度是512bits,也就是64字節(jié)
用SHA-1算法計算摘要,和MD5非常類似,我們只是把MD5簡單的替換成SHA-1,調(diào)用MessageDigest.getInstance("SHA-1")就可以獲得一個SHA-1的MessageDigest實例,最后我們也調(diào)用digest()方法獲得SHA-1的byte字節(jié)表示的摘要,返回的是20個字節(jié)
package com.learn.securl;import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class SHADemo {public static byte[] sha1(byte[] input) {MessageDigest md = null;try {/*** 我們注意到使用SHA-1算法的時候* 和MD5相比,* 我們只把MessageDigest.getInstance傳入的MD5改成了SHA-1* 就可以了*/md = MessageDigest.getInstance("SHA-1");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}md.update(input);return md.digest();}/*** 剩下的代碼是一樣的* 另外JAVA生成的摘要是20個字節(jié)* @throws Exception */public static void main(String[] args) throws Exception {String s = "SHA1摘要算法測試";byte[] r = sha1(s.getBytes("UTF-8"));/*** 所以我們用百分號040x輸出這20個字節(jié)* c87e25c44b9c470414b7adafb05864f97e6e6e8d* */System.out.println(String.format("%040x", new BigInteger(1,r)));}
}
package com.learn.securl;import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** 我們再來看改進(jìn)的Digest* @author Leon.Sun**/
public class DigestDemo {/*** 我們對SHA1方法進(jìn)行了改進(jìn)* 傳入一個摘算法的名稱* 這樣我們就可以傳入任意的摘要算法來計算輸入的摘要* @param hashAlgorithm* @param input* @return*/public static byte[] digest(String hashAlgorithm, byte[] input) {MessageDigest md = null;try {md = MessageDigest.getInstance(hashAlgorithm);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}md.update(input);return md.digest();}public static void main(String[] args) throws Exception {String s = "Java摘要算法測試";byte[] input = s.getBytes("UTF-8");// 標(biāo)準(zhǔn)算法名稱/*** 我們可以訪問JDK的官方網(wǎng)站* ORACLE的官方網(wǎng)站訪問摘要算法的名稱* */// http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest/*** 我們來看一下常用的算法,* MD5* MD5輸出的是16個字節(jié)*/byte[] r1 = digest("MD5",input);System.out.println(r1.length + ": " + String.format("%032x", new BigInteger(1,r1)));/*** SHA-1的輸出是20個字節(jié)*/byte[] r2 = digest("SHA-1",input);System.out.println(r2.length + ": " + String.format("%040x", new BigInteger(1,r2)));/*** SHA-256* SHA-256輸出的是32個字節(jié)*/byte[] r3 = digest("SHA-256",input);System.out.println(r3.length + ": " + String.format("%0"+(r3)));/*** RipeMD160* 當(dāng)我們計算RipeMD160的時候,* JDK報錯* 也就是JDK并沒有包含RipeMD160算法* 如果我們要查詢JDK標(biāo)準(zhǔn)的算法*/byte[] r4 = digest("RipeMD160",input);System.out.println(r4.length + ": " + String.format("%0"+(r4)));}
}
1. SHA-1算法是一種比MD5更安全的算法2. 他還有其他的哈希算法,比如SHA-256,SHA-512,RipeMD-160
?
總結(jié)
以上是生活随笔為你收集整理的SHA1 - Java加密与安全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MD5 - Java加密与安全
- 下一篇: BouncyCastle - Java加