`

MAC 密钥散列算法

 
阅读更多
package com.dream.util;

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

import junit.framework.TestCase;

import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;

/**
 * @author zxg
 * @see MAC(Message Authentication Code) HMAC(keyed-Hash Message Authentication
 *      Code) 含有密钥的散列函数算法 融合了MD和SHA特性,多了密钥 HmacMD5..,HmacSHA1等
 */
public class MACTest extends TestCase {
	private String str = "zxg is a boy";

	/**
	 * jdk hmacMD5
	 */
	public void testjdkHmacMD5() throws Exception {
		KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
		SecretKey secretKey = keyGenerator.generateKey();// 产生密钥
		byte[] key = Hex.decodeHex("aaaaaaaaaa".toCharArray());
		SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5");// 还原密钥
		Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());// 实例化MAC
		mac.init(restoreSecretKey);// 初始化Mac
		byte[] hmacMD5Bytes = mac.doFinal(str.getBytes());// 执行摘要
		System.out.println(Hex.encodeHexString(hmacMD5Bytes));
	}

	/**
	 * bc hmacMD5
	 */
	public void testbcHmacMD5() {
		HMac hmac = new HMac(new MD5Digest());
		hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex
				.decode("aaaaaaaaaa")));
		hmac.update(str.getBytes(), 0, str.getBytes().length);
		byte[] hmacMD5bytes = new byte[hmac.getMacSize()];
		hmac.doFinal(hmacMD5bytes, 0);
		System.out.println(org.bouncycastle.util.encoders.Hex
				.toHexString(hmacMD5bytes));
	}
}

 

分享到:
评论

相关推荐

    认证及散列算法

    ### 认证及散列算法 #### 知识点概览 本文档主要围绕现代密码学中的消息认证与散列算法展开,详细介绍了几种常用的散列算法及其应用场景,并探讨了这些算法的安全性评估。 #### 散列算法简介 散列算法是一种将...

    Des计算工具(DES,MAC,密钥分散)

    MAC,密钥分散)”指的是一个软件工具,它集成了多种加密和安全相关的功能,主要包括DES(Data Encryption Standard)算法的运算、MAC(Message Authentication Code)的生成以及密钥分散的技术。这些是信息安全领域...

    .NET加密算法/密钥算法 详解 doc

    MAC(消息认证码)结合了密钥和散列函数,以验证消息的来源和完整性,HMAC是其典型实现。CRC(循环冗余校验)虽然不是严格意义上的散列算法,但常用于检测数据传输错误。 在.NET Framework中,所有这些加密和编码...

    金融行业密钥详解.pdf

    当数据到达接收方时,接收方用相同的密钥和算法对数据重新进行加密和散列处理,然后对比MAC码,如果MAC码一致,则说明数据未被篡改。 在文章中,作者提出了用银行专用网络来保证数据安全的思路,但这种做法存在局限...

    asp.net的加密解密技巧

    - HMAC(密钥散列消息认证码):是MAC的一种实现,其内部结合了哈希函数和密钥。 - CRC(循环冗余校验码):主要用于数据校验,可以检测数据在传输或存储过程中的错误。 最后,其他数据算法包括Base64、...

    哈希函数与数据完整性

    - **带密钥的哈希函数**:这类函数在计算过程中会引入一个密钥,通常用于安全性更高的场景,如消息认证码(Message Authentication Code, MAC)。 从功能上来看,哈希函数可以分为: - **改动检测码(MDC)**:主要...

    数据加密算法

    - **CRC(Cyclic Redundancy Check)**:非严格意义上的散列算法,主要用于数据传输中的错误检测。 3. **其他数据算法**: - **Base64、Quoted Printable、EBCDIC**:这些都是数据编码算法,用于将二进制数据转换...

    SSL协议详解

    **散列算法**用于验证数据的完整性和一致性,常见的散列算法包括: - **MD5**: 一种较早的散列算法,尽管已经被认为不够安全,但在某些场景下仍然被使用。 - **SHA-1**: 比MD5更安全的散列算法,但已被更强大的SHA-...

    多种加密算法

    HMAC(Hash-based Message Authentication Code)是一种基于散列函数的消息认证码,它结合了散列算法(如MD5或SHA)和密钥,用于验证消息的完整性和来源的真实性。HMAC提供了比简单的散列函数更高的安全性,因为它...

    消息认证及其算法消息认证及其算法.pdf

    HMAC(Hash-based Message Authentication Code)是一种基于散列函数的MAC,它利用密钥和散列函数共同产生MAC,增强了安全性。CMAC(Cipher-based Message Authentication Code)则基于块密码,同样用于生成MAC,...

    ASP常用的加密和解密的方法

    - **CRC (Cyclic Redundancy Check)**:循环冗余校验码,虽然不是严格意义上的散列算法,但其功能与散列算法相似,被广泛用于数据传输中的错误检测。 ##### 3. 其他数据算法 此外,还有一些常用的编码算法及其与...

    MAC算法源代码

    MAC算法有很多种实现,比如HMAC(Hash-based Message Authentication Code),它是基于哈希函数的MAC,结合了散列函数和密钥操作,具有较高的安全性和效率。此外,还有如CMAC(Cipher-based Message Authentication ...

    Ascon-轻量级认证加密和散列.zip

    Ascon是一种轻量级的认证加密和散列算法,它在设计时特别考虑了资源受限的设备,如物联网(IoT)设备。该算法在2017年NIST(美国国家标准与技术研究所)的轻量级密码学标准竞赛中被选为候选算法之一,展现了其在效率...

    第三章 消息认证与数字签名

    - **MD5**:一种广泛应用的散列算法,尽管现在已被认为不够安全,但在某些场合仍然使用。 - **SHA-512**:一种更安全的散列算法,能够提供更高的安全性保障。 #### 六、消息认证码(MAC) 消息认证码(Message ...

    详述Asp.net的加密解密技巧

    该命名空间包含了对称加密(如DES、RC2、Rijndael和3DES)、非对称加密(如DSA和RSA)以及散列算法(如SHA和MD5)的类。对称加密使用相同的密钥进行加密和解密,速度快,适合处理大量数据。非对称加密则使用一对公钥...

    加密算法代码库

    Crypto++库是一个开源的C++类库,提供了多种加密和哈希算法,如RSA、DSA(数字签名算法)、AES、SHA(安全散列算法)和ECC。它不仅包括基本的加密操作,还涵盖了密钥生成、数字签名、消息认证码(MAC)等功能。 ...

    SHA-3候选算法之Skein

    3. **可扩展性**:Skein不仅用于生成固定长度的散列值,还可以作为消息认证码(MAC)、流密码和密钥派生函数(KDF)等。 **四、Skein与其他SHA-3候选算法的比较** 在第三轮候选中,Skein与Keccak、Blake、Groestl...

    C++多种算法实现的在线签名鉴定.zip

    1. **散列算法**:如MD5、SHA-1、SHA-256等。散列函数将任意长度的输入转换为固定长度的输出,称为散列值。如果原始数据被篡改,其散列值也会改变,因此可以用来检查数据的完整性。 2. **非对称加密算法**:如RSA、...

    hmac散列函数

    可能需要使用标准库如OpenSSL中的`EVP_MAC`接口,或者手动实现散列函数。这通常涉及分配内存,处理字节序列,以及执行多次散列操作。 6. **安全性考虑**:在实际应用中,密钥的管理是至关重要的。必须妥善存储和...

Global site tag (gtag.js) - Google Analytics