簡述
SHA算法分為一代和二代,這個是美國安全局發布的一系列的密碼散列算法。
基于如下兩點安全理由:
1、從消息摘要反推輸入信息,從計算理論上來說很困難
2、想找到兩組不同的消息對應到相應的消息摘要,從計算理論上來說一額很困難。對任何消息的變動,都有很高幾率產生消息摘要迥異
不過這個算法已經不安全了,被中國的教授破解了。這個技術通常用來做數字簽名。常見的就是B2B,B2C網站的支付。數據post到支付中心的時候,是發送一些加密串,同時帶上簽名。而這個簽名可以被偽造。所以就不安全了。
常見的使用模型
1、甲方發布消息摘要算法(就是指定用哪個算法做消息摘要處理),然后對要發布的消息做摘要處理
2、甲方將消息以及消息摘要信息(這里大家通常叫摘要信息為數字指紋)發送給乙方
3、乙方接收后,用甲方指定的消息摘要算法,對消息進行摘要處理,然后比對是否和發送過來的消息摘要相同。以甄別消息真假
先讓我們用sun本身的jdk6的代碼展示下sha的消息摘要算法
package com.ca.test;
import java.security.MessageDigest;
/**
* 下邊都是sun java6支持的消息摘要算法
* 進行sha的消息摘要算法處理
* @author kongqz
* */
public class SHACoder {
/**
* SHA-1消息摘要
* @param 待處理的消息摘要
* @author kongqz
*
* **/
public static byte[] encodeSHA(byte[] data) throws Exception{
//初始化MessageDisgest
MessageDigest md= MessageDigest.getInstance("SHA");
return md.digest(data);
}
/**
* SHA-256消息摘要
* @param 待處理的消息摘要
* @author kongqz
*
* **/
public static byte[] encodeSHA256(byte[] data) throws Exception{
//初始化MessageDisgest
MessageDigest md= MessageDigest.getInstance("SHA-256");
return md.digest(data);
}
/**
* SHA-384消息摘要
* @param 待處理的消息摘要
* @author kongqz
*
* **/
public static byte[] encodeSHA384(byte[] data) throws Exception{
//初始化MessageDisgest
MessageDigest md= MessageDigest.getInstance("SHA-384");
return md.digest(data);
}
/**
* SHA-512消息摘要
* @param 待處理的消息摘要
* @author kongqz
*
* **/
public static byte[] encodeSHA512(byte[] data) throws Exception{
//初始化MessageDisgest
MessageDigest md= MessageDigest.getInstance("SHA-512");
return md.digest(data);
}
public static void main(String[] args) throws Exception {
String str="java支持的SHA 消息摘要算法";
System.out.println("原文:"+str);
byte[] data1=SHACoder.encodeSHA(str.getBytes());
System.out.println("SHA/SHA1的消息摘要算法值:"+data1.toString());
byte[] data2=SHACoder.encodeSHA256(str.getBytes());
System.out.println("SHA-256的消息摘要算法值:"+data2.toString());
byte[] data3=SHACoder.encodeSHA384(str.getBytes());
System.out.println("SHA-384的消息摘要算法值:"+data3.toString());
byte[] data4=SHACoder.encodeSHA512(str.getBytes());
System.out.println("SHA-512的消息摘要算法值:"+data4.toString());
}
}
控制臺輸出結果:
原文:java支持的SHA 消息摘要算法
SHA/SHA1的消息摘要算法值:[B@1fb8ee3
SHA-256的消息摘要算法值:[B@14318bb
SHA-384的消息摘要算法值:[B@1a758cb
SHA-512的消息摘要算法值:[B@69b332