`

HMACSHA1加密

阅读更多
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "YKfuZFBpng594pRhgE81wFah";
            string src = "AccessorId";
            HMACSHA1 hmac = new HMACSHA1();
            byte[] bs = System.Text.Encoding.UTF8.GetBytes(str);
            hmac.Key = bs;
            byte[] srcb = System.Text.Encoding.UTF8.GetBytes(src);
            byte[] result = hmac.ComputeHash(srcb);
            string strResult = Convert.ToBase64String(result);
            Console.WriteLine(strResult);
            Console.ReadLine();
        }
    }
}

 java版本

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;  
import java.security.NoSuchAlgorithmException;  
  
import javax.crypto.Mac;  
import javax.crypto.spec.SecretKeySpec;

public class Util {

	private static final String HMAC_SHA1 = "HmacSHA1";     
    
    /**   
     * 生成签名数据   
     *    
     * @param data 待加密的数据
     * @param key  加密使用的key
     * 
     * return 成功返回签名串,失败返回空串
     */    
    public static String getSignature(String data,String key) {
    	
    	key = key.replace('-', '+');
    	key = key.replace('_', '/');
    	
    	byte[] keyBytes=key.getBytes();  
        SecretKeySpec signingKey = new SecretKeySpec(keyBytes, HMAC_SHA1);     
        
		try {
			Mac mac = Mac.getInstance(HMAC_SHA1);
			mac.init(signingKey);     
	        byte[] rawHmac = mac.doFinal(data.getBytes());  
	        
	        return encode64(rawHmac);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		}     
        
        return "";
    }
    
    /**
     * rawurlEncode
     * 
     * @param source
     * @return
     */
    public static String rawurlEncode(String source, String encoding) 
    		throws UnsupportedEncodingException{
		if(source == null){
			return null;
		}
		
		source = URLEncoder.encode(source, encoding);
		source = source.replace("+", "%20");
		return source;
	}
    
    /*
    private static String byteToHexString(byte ib){  
    	char[] Digit={  
    			'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'  
    	};  
    	char[] ob=new char[2];  
    	ob[0]=Digit[(ib>>>4)& 0X0f];  
    	ob[1]=Digit[ib & 0X0F];  
    	String s=new String(ob);  
    	return s;           
    }*/

    public static String encode64(byte[] raw) {
    	StringBuffer encoded = new StringBuffer();
    	for (int i = 0; i < raw.length; i += 3) {
    		encoded.append(encodeBlock(raw, i));
    	}
    	return encoded.toString();
    }

    protected static char[] encodeBlock(byte[] raw, int offset) {
    	int block = 0;
    	int slack = raw.length - offset - 1;
    	int end = (slack >= 2) ? 2 : slack;
    	for (int i = 0; i <= end; i++) {
    		byte b = raw[offset + i];
    		int neuter = (b < 0) ? b + 256 : b;
    		block += neuter << (8 * (2 - i));
    	}
    	char[] base64 = new char[4];
    	for (int i = 0; i < 4; i++) {
    		int sixbit = (block >>> (6 * (3 - i))) & 0x3f;
    		base64[i] = getChar(sixbit);
    	}
    	if (slack < 1) base64[2] = '=';
    	if (slack < 2) base64[3] = '=';
    	return base64;
    }

    protected static char getChar(int sixBit) {
    	if (sixBit >= 0 && sixBit <= 25)
    		return (char)('A' + sixBit);
    	if (sixBit >= 26 && sixBit <= 51)
    		return (char)('a' + (sixBit - 26));
    	if (sixBit >= 52 && sixBit <= 61)
    		return (char)('0' + (sixBit - 52));
    	if (sixBit == 62) return '+';
    	if (sixBit == 63) return '/';
    	return '?';
    }

    public static byte[] decode64(String base64) {
    	int pad = 0;
    	for (int i = base64.length() - 1; base64.charAt(i) == '='; i--)
    		pad++;
    	int length = base64.length() * 6 / 8 - pad;
    	byte[] raw = new byte[length];
    	int rawIndex = 0;
    	for (int i = 0; i < base64.length(); i += 4) {
    		int block = (getValue(base64.charAt(i)) << 18)
    				+ (getValue(base64.charAt(i + 1)) << 12)
    				+ (getValue(base64.charAt(i + 2)) << 6)
    				+ (getValue(base64.charAt(i + 3)));
    		for (int j = 0; j < 3 && rawIndex + j < raw.length; j++)
    			raw[rawIndex + j] = (byte)((block >> (8 * (2 - j))) & 0xff);
    		rawIndex += 3;
    	}
    	return raw;
    }

    protected static int getValue(char c) {
    	if (c >= 'A' && c <= 'Z') return c - 'A';
    	if (c >= 'a' && c <= 'z') return c - 'a' + 26;
    	if (c >= '0' && c <= '9') return c - '0' + 52;
    	if (c == '+') return 62;
    	if (c == '/') return 63;
    	if (c == '=') return 0;
    	return -1;
    }
}

 两者结果一致

分享到:
评论

相关推荐

    ionic通过HmacSHA1加密对接Java系统

    在本文中,我们将深入探讨如何使用Ionic框架通过HmacSHA1加密方法与Java系统进行安全的数据交互。HmacSHA1(Hash-based Message Authentication Code with SHA-1)是一种用于验证数据完整性和来源的安全算法,常用于...

    hmacsha1加密统计

    在这个场景中,我们将深入探讨C++环境下如何利用MFC(Microsoft Foundation Classes)框架来调用HMACSHA1算法进行数据加密。 HMAC是一种基于密钥的哈希函数,它结合了密钥和消息,生成一个固定长度的摘要,以此来...

    OAuth认证协议中的HMACSHA1加密算法(实例)

    在OAuth认证过程中,HMACSHA1加密算法作为一种消息验证算法,经常被用于确保数据传输的安全性和完整性。 HMACSHA1是HMAC算法的一种实现方式,HMAC(Hash-based Message Authentication Code,基于散列的消息认证码...

    易语言HmacSHA256加密源码

    1. **生成密钥**:HmacSHA256需要一个密钥,这个密钥通常是由用户提供的,应保持私密。密钥可以是任意长度,但为了最佳安全性,建议至少为256位(32字节)。 2. **预处理密钥**:如果密钥长度超过哈希函数的输入...

    pb12.5外部函数扩展pbfunc(包含HMACSHA1加密、HMACSHA256加密、哈希算法二维码、json)demo

    PB12.5外部函数扩展pbfunc是一个针对PowerBuilder 12.5开发者的实用工具,它提供了多种功能,如HMACSHA1和HMACSHA256加密算法,哈希算法,二维码生成,以及JSON处理。这个工具的目的是帮助开发者在PowerBuilder应用...

    HmacSHA加密帮助类

    HmacSHA加密是一种基于密钥的哈希消息认证码(Hash-based Message Authentication Code)算法,它结合了哈希函数(如SHA-1、SHA-256、SHA-384、SHA-512)和密钥来验证数据的完整性和来源的可靠性。本项目提供的是一...

    DELPHI使用HMACSHA1加密(XE8)

    有些地方加密要HMACSHA1,我研究了开发了DELPHI版本的DLL,源码和资源如上

    易语言HmacSHA256加密

    在网络安全领域,加密技术扮演着至关重要的角色,其中HmacSHA256是一种常用的哈希消息认证码(HMAC)算法,结合了SHA256散列函数,提供了数据完整性和身份验证的功能。 HMAC(Hash-based Message Authentication ...

    HMAC SHA1加密 C语言源码

    标题中的“HMAC SHA1加密 C语言源码”是指一种基于哈希消息认证码(HMAC)和SHA1算法的加密方法,它在C语言环境中实现。HMAC(Hash-based Message Authentication Code)是一种用于验证数据完整性和来源的安全机制,...

    Vue-常用加密(MD5,DES,SHA256,BASE64,SHA1,RSA)

    Vue-常用加密(MD5, DES, SHA256, BASE64, SHA1, RSA) Vue 中常见的加密算法可以分成三类:对称加密算法、非对称加密算法和 Hash 算法。下面将详细介绍每种加密算法的特点、优点和缺点,以及它们的应用场景。 一...

    HmacSHA256加密.rar

    4. **验证和比较**:在接收端,同样使用HmacSHA256对消息进行加密,并与发送方的HMAC值进行比较,如果两者匹配,则表示消息未被篡改。 在实际应用中,HmacSHA256常与RSA、AES等其他加密算法配合使用,提供更为全面...

    易语言源码易语言HmacSHA256加密源码.rar

    在本压缩包“易语言源码易语言HmacSHA256加密源码.rar”中,包含的是使用易语言实现的HmacSHA256加密算法的源代码。 Hmac(Hash-based Message Authentication Code)基于哈希的消息认证码,是一种用于验证数据完整...

    sha1与hmac_sha1不可逆加密 v1.0.rar

    暴出来的密码都是40位sha1加密的,所以在一些md5网站找不到,感觉很安全,所以才弄了一个这小程序给大家,希望大家喜欢,里面包含了六种加密方式,喜欢用那种就用那种。 网站用于密码和用户加密码还是MD5的多,但是...

    易语言HmacSHA256加密源码.7z

    在网络安全领域,加密技术扮演着至关重要的角色,其中HmacSHA256是一种常用的哈希消息认证码(HMAC)算法,结合了SHA256散列函数,提供了数据完整性和身份验证的功能。 HMAC(Hash-based Message Authentication ...

    HMAC-SHA1算法的VC DLL

    HMAC-SHA1算法是一种基于密钥的哈希消息认证码(Hash-based Message Authentication Code)算法,它结合了哈希函数SHA1(Secure Hash Algorithm 1)和密钥,用于验证数据的完整性和来源的可靠性。在VC++环境中,将...

    HMACSHA256加密动态库DLL,可供delphi,pb等程序调用得到加密后数据

    &lt;mode&gt;0:加密 1:解密 加解密算法名称,目前支持HMACSHA256 数据 额外参数 --额外参数说: 密钥 加密后数据编码:Hex/Base64 --------------------------------------------- 注意事项: 需把libeay32.dll、ssleay32....

    各种加密解密在线演示

    文字在线加密解密、散列/哈希、BASE64、SHA1、SHA224、SHA256、SHA384、SHA512、MD5、HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512、HmacMD5、urlencode、urldecode

    sha256_Hmac加密工具类

    sha256_Hmac加密; sha256_Hmac解密;

    HmacSHA256.rar

    标题 "HmacSHA256.rar" 涉及到的是使用DELPHI编程语言实现的HMAC-SHA256算法。HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的安全机制,用于验证数据的完整性和来源的可靠性。SHA256是SHA-2...

Global site tag (gtag.js) - Google Analytics