Java签名算法之HMAC-SHA1

import java.security.SignatureException;

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

/**
 * This class defines common routines for generating authentication signatures
 * for AWS requests.
 */
public class Signature {
	private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";

	/**
	 * Computes RFC 2104-compliant HMAC signature. * @param data The data to be
	 * signed.
	 * 
	 * @param key
	 *            The signing key.
	 * @return The Base64-encoded RFC 2104-compliant HMAC signature.
	 * @throws java.security.SignatureException
	 *             when signature generation fails
	 */
	public static String calculateRFC2104HMAC(String data, String key)
			throws java.security.SignatureException {
		String result;
		try {

			// get an hmac_sha1 key from the raw key bytes
			SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(),
					HMAC_SHA1_ALGORITHM);

			// get an hmac_sha1 Mac instance and initialize with the signing key
			Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
			mac.init(signingKey);

			// compute the hmac on input data bytes
			byte[] rawHmac = mac.doFinal(data.getBytes());

			// base64-encode the hmac
			result = BASE64Encoder.encode(rawHmac);
//			result = Encoding.EncodeBase64(rawHmac);

		} catch (Exception e) {
			throw new SignatureException("Failed to generate HMAC : "
					+ e.getMessage());
		}
		return result;
	}

	public static byte[] hmacSHA1(String data, String key) throws java.security.SignatureException {
		try {
			// get an hmac_sha1 key from the raw key bytes
			SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(),
					HMAC_SHA1_ALGORITHM);

			// get an hmac_sha1 Mac instance and initialize with the signing key
			Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
			mac.init(signingKey);

			// compute the hmac on input data bytes
			byte[] rawHmac = mac.doFinal(data.getBytes());

			return rawHmac;

		} catch (Exception e) {
			throw new SignatureException("Failed to generate HMAC : "
					+ e.getMessage());
		}
	}
}
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SignatureException;
import java.util.Formatter; 
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;  
/** 
 * The <tt>HmacSha1Signature</tt> shows how to calculate  
 * a message authentication code using HMAC-SHA1 algorithm. 
 * 
 * <pre> 
 * % java -version 
 * java version "1.6.0_11" 
 * % javac HmacSha1Signature.java  
 * % java -ea HmacSha1Signature 
 * 104152c5bfdca07bc633eebd46199f0255c9f49d 
 * </pre> 
 * 
 */
 public class HmacSha1Signature {
     private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1"; 
     private static String toHexString(byte[] bytes) {
         Formatter formatter = new Formatter();
         for (byte b : bytes) {
             formatter.format("%02x", b);		、
         } 
         return formatter.toString();
    } 
    
    public static String calculateRFC2104HMAC(String data, String key) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException	{
        SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);		Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
        mac.init(signingKey);
        return toHexString(mac.doFinal(data.getBytes()));
     } 
     
     public static void main(String[] args) throws Exception {
         String hmac = calculateRFC2104HMAC("data", "key"); 
         System.out.println(hmac);
         assert hmac.equals("104152c5bfdca07bc633eebd46199f0255c9f49d");
     }
}
时间: 2025-01-20 09:06:10

Java签名算法之HMAC-SHA1的相关文章

C++计算HMAC sha1和HMAC MD5 与java 计算HMAC sha1和HMAC MD5不一样?求高手解答,附上源码

问题描述 publicclassSHA1{privatefinalint[]abcde={0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0};//摘要数据存储数组privateint[]digestInt=newint[5];//计算过程中的临时数据存储数组privateint[]tmpData=newint[80];//计算sha-1摘要privateintprocess_input_bytes(byte[]bytedata){//初

JAVA上加密算法的实现用例MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用(转)

源文作者王辉 第1章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常,使用的加密算法比较简便高效,密钥简短,加解密速度快,破译极其困难.但是加密的安全性依靠密钥保管的安全性,在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并且如果在多用户的情况下密钥的保管安全性也是一个问题. 单钥密码体制的代表是美国的DES 1.2. 消息摘要 一个消息摘要就是一个数据块的数字指纹.即对一个任意长度的一个数据块进行计算,产

Java加密技术(一)——BASE64与单向加密算法MD5&amp;amp;SHA&amp;amp;MAC

 加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     如基本的单向加密算法:  BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Cod

java c# sign-签名算法,java代码转为 C#

问题描述 签名算法,java代码转为 C# 请帮忙把如下的java签名算法转换为c#的,牛人伸手啊!! 具体代码如下: public static String genSignature(String sk, String stringToSign) { String signature = ""; try { String encodedSign = URLEncoder.encode(stringToSign, ENCODING); try { Mac mac = Mac.getI

JAVA 上加密算法的实现用例

 JAVA 上加密算法的实现用例    1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.但是加密的安全性依靠密钥保管的安全性 , 在公开的计算机网络上安全地传送和保管密钥是一个严峻的问题,并且如果在多用户的情况下密钥的保管安全性也是一个问题. 单钥密码体制的代表是美国的 DES 1.2. 消息摘要 一个消息摘要就是一个数据块的数字指纹.即对一个任意长

AES加密解密&amp;&amp;SHA1、SHA加密&amp;&amp;MD5加密

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 AES加密解密 SHA1.SHA加密 MD5加密 二话不说马上附上代码: package com.luo.util; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.sec

C#中的SHA1加密算法不接受sbyte怎么办

问题描述 是这样我们系统和用户的另一个系统进行用户对接他们的代码是java写的用16进制数byte加盐进行散列计算加密现在要用C#这边进行代码验证JAVA里面byte是-128-127C#里面byte是0-256Sbyte是-128-127但是C#的sha1加密算法不接受Sbyte参数如果转换为byte再加密加密结果不一样求问怎么破 解决方案 解决方案二:有区别吗?区别只是在表示成10进制时内码都是一样的解决方案三:区别就是用SHA1加密后得到的结果不一样解决方案四:那就要看你和java都是怎么

java常见加密方式介绍

本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法.      BASE64编码算法不算是真正的加密算法.      MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法.我们通常只把他们作为加密的基础.单纯的以上三种的加密并不可靠.  BASE64  按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式.(The Base64 Content-T

微信开发之使用java获取签名signature_java

一.前言 微信接口调用验证最终需要用到的三个参数noncestr.timestamp.signature: 接下来将会给出获取这三个参数的详细代码 本文的环境eclipse + maven 本文使用到的技术HttpClient.Json字符串转map.sha1加密 二.需要用到的jar包 maven依赖的包有: 1.HttpClient包依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <ar