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)); } }
相关推荐
### 认证及散列算法 #### 知识点概览 本文档主要围绕现代密码学中的消息认证与散列算法展开,详细介绍了几种常用的散列算法及其应用场景,并探讨了这些算法的安全性评估。 #### 散列算法简介 散列算法是一种将...
MAC,密钥分散)”指的是一个软件工具,它集成了多种加密和安全相关的功能,主要包括DES(Data Encryption Standard)算法的运算、MAC(Message Authentication Code)的生成以及密钥分散的技术。这些是信息安全领域...
MAC(消息认证码)结合了密钥和散列函数,以验证消息的来源和完整性,HMAC是其典型实现。CRC(循环冗余校验)虽然不是严格意义上的散列算法,但常用于检测数据传输错误。 在.NET Framework中,所有这些加密和编码...
当数据到达接收方时,接收方用相同的密钥和算法对数据重新进行加密和散列处理,然后对比MAC码,如果MAC码一致,则说明数据未被篡改。 在文章中,作者提出了用银行专用网络来保证数据安全的思路,但这种做法存在局限...
- HMAC(密钥散列消息认证码):是MAC的一种实现,其内部结合了哈希函数和密钥。 - CRC(循环冗余校验码):主要用于数据校验,可以检测数据在传输或存储过程中的错误。 最后,其他数据算法包括Base64、...
- **带密钥的哈希函数**:这类函数在计算过程中会引入一个密钥,通常用于安全性更高的场景,如消息认证码(Message Authentication Code, MAC)。 从功能上来看,哈希函数可以分为: - **改动检测码(MDC)**:主要...
- **CRC(Cyclic Redundancy Check)**:非严格意义上的散列算法,主要用于数据传输中的错误检测。 3. **其他数据算法**: - **Base64、Quoted Printable、EBCDIC**:这些都是数据编码算法,用于将二进制数据转换...
**散列算法**用于验证数据的完整性和一致性,常见的散列算法包括: - **MD5**: 一种较早的散列算法,尽管已经被认为不够安全,但在某些场景下仍然被使用。 - **SHA-1**: 比MD5更安全的散列算法,但已被更强大的SHA-...
HMAC(Hash-based Message Authentication Code)是一种基于散列函数的消息认证码,它结合了散列算法(如MD5或SHA)和密钥,用于验证消息的完整性和来源的真实性。HMAC提供了比简单的散列函数更高的安全性,因为它...
HMAC(Hash-based Message Authentication Code)是一种基于散列函数的MAC,它利用密钥和散列函数共同产生MAC,增强了安全性。CMAC(Cipher-based Message Authentication Code)则基于块密码,同样用于生成MAC,...
- **CRC (Cyclic Redundancy Check)**:循环冗余校验码,虽然不是严格意义上的散列算法,但其功能与散列算法相似,被广泛用于数据传输中的错误检测。 ##### 3. 其他数据算法 此外,还有一些常用的编码算法及其与...
MAC算法有很多种实现,比如HMAC(Hash-based Message Authentication Code),它是基于哈希函数的MAC,结合了散列函数和密钥操作,具有较高的安全性和效率。此外,还有如CMAC(Cipher-based Message Authentication ...
Ascon是一种轻量级的认证加密和散列算法,它在设计时特别考虑了资源受限的设备,如物联网(IoT)设备。该算法在2017年NIST(美国国家标准与技术研究所)的轻量级密码学标准竞赛中被选为候选算法之一,展现了其在效率...
- **MD5**:一种广泛应用的散列算法,尽管现在已被认为不够安全,但在某些场合仍然使用。 - **SHA-512**:一种更安全的散列算法,能够提供更高的安全性保障。 #### 六、消息认证码(MAC) 消息认证码(Message ...
该命名空间包含了对称加密(如DES、RC2、Rijndael和3DES)、非对称加密(如DSA和RSA)以及散列算法(如SHA和MD5)的类。对称加密使用相同的密钥进行加密和解密,速度快,适合处理大量数据。非对称加密则使用一对公钥...
Crypto++库是一个开源的C++类库,提供了多种加密和哈希算法,如RSA、DSA(数字签名算法)、AES、SHA(安全散列算法)和ECC。它不仅包括基本的加密操作,还涵盖了密钥生成、数字签名、消息认证码(MAC)等功能。 ...
3. **可扩展性**:Skein不仅用于生成固定长度的散列值,还可以作为消息认证码(MAC)、流密码和密钥派生函数(KDF)等。 **四、Skein与其他SHA-3候选算法的比较** 在第三轮候选中,Skein与Keccak、Blake、Groestl...
1. **散列算法**:如MD5、SHA-1、SHA-256等。散列函数将任意长度的输入转换为固定长度的输出,称为散列值。如果原始数据被篡改,其散列值也会改变,因此可以用来检查数据的完整性。 2. **非对称加密算法**:如RSA、...
可能需要使用标准库如OpenSSL中的`EVP_MAC`接口,或者手动实现散列函数。这通常涉及分配内存,处理字节序列,以及执行多次散列操作。 6. **安全性考虑**:在实际应用中,密钥的管理是至关重要的。必须妥善存储和...