Java暗号化技術(三)——HMACSHA 1暗号化アルゴリズム


HMACSHA 1は、SHA 1ハッシュ関数から構成されたキーイングハッシュアルゴリズムであり、HMAC(ハッシュベースのメッセージ検証コード)として使用される.このHMACプロセスは、鍵をメッセージデータと混合し、ハッシュ関数を使用して混合結果をハッシュ計算し、得られたハッシュ値を鍵と混合し、ハッシュ関数を再適用する.出力されるハッシュ値の長さは160ビットである.
送信者と受信者が秘密鍵を共有することを前提として、HMACは、不安全なチャネルを介して送信されたメッセージが改ざんされたかどうかを決定するために使用され得る.送信者は、元のデータのハッシュ値を計算し、元のデータとハッシュ値を1つのメッセージに同時に送信する.受信者は、受信メッセージのハッシュ値を再計算し、計算されたHMACが送信されたHMACと一致するかどうかを確認する.
メッセージの変更と正しいハッシュ値の再生成には鍵が必要なため、データまたはハッシュ値の変更によって不一致が発生します.したがって、元のハッシュ値が計算されたハッシュ値と一致する場合、メッセージは認証される.
SHA−1(セキュリティハッシュアルゴリズム、SHS、セキュリティハッシュ規格とも呼ばれる)は、米国政府によって発行された暗号化ハッシュアルゴリズムである.任意の長さの文字列から160ビットのハッシュ値が生成されます.
HMACSHA 1は任意のサイズの鍵を受け取り、160ビットの長さのハッシュ・シーケンスを生成する.
package com.hujl.oauth.signature;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class HMACSHA1 {

	private static final String MAC_NAME = "HmacSHA1";  
    private static final String ENCODING = "UTF-8";  
    
	/*
	 *                     HMAC   
	 * @return 
	 * @throws Exception
	 * 
	  public static String initMacKey() throws Exception {
	  //                 
	  KeyGenerator KeyGenerator keyGenerator =KeyGenerator.getInstance(MAC_NAME); 
	  //      
	  SecretKey secretKey =keyGenerator.generateKey();
	  return null;
	  }
	 */
    
    /** 
     *    HMAC-SHA1       encryptText     
     * @param encryptText         
     * @param encryptKey     
     * @return 
     * @throws Exception 
     */  
    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception   
    {         
    	byte[] data=encryptKey.getBytes(ENCODING);
    	//               ,               
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME); 
        //       Mac      Mac   
        Mac mac = Mac.getInstance(MAC_NAME); 
        //         Mac   
        mac.init(secretKey);  
        
        byte[] text = encryptText.getBytes(ENCODING);  
        //   Mac    
        return mac.doFinal(text);  
    }  
}