HmacSHA 和HmacMd5 加密算法实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HmacSHA 和HmacMd5 加密算法实现相关的知识,希望对你有一定的参考价值。
package com.asiainfo.encryption.s2; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SignatureException; import java.util.Formatter; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Encoder; public class HmacSignature { private static final String HMAC_SHA1_ALGORITHM = "HMACSHA1"; //算法名称 etc: HMACSHA256、HMACSHA384、HMACSHA512、HMACMD5、(jdk 没有提供HMACSHA224的算法实现) private static String toHexString(byte[] bytes) { Formatter formatter = new Formatter(); for (byte b : bytes) { formatter.format("%02x", b); } String hexString = formatter.toString(); formatter.close(); return hexString; } 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 String calculateRFC2104HMAC(String data, byte[] key) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException { SecretKeySpec signingKey = new SecretKeySpec(key, 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 { KeyGenerator generator = KeyGenerator.getInstance(HMAC_SHA1_ALGORITHM); SecretKey key = generator.generateKey(); byte[] digest = key.getEncoded(); BASE64Encoder encoder = new BASE64Encoder(); String encoderDigest = encoder.encodeBuffer(digest); encoderDigest = encoderDigest.replaceAll("[^(A-Za-z0-9)]", ""); //如果想看到生成的密钥 System.out.println("Base64编码后的密钥:" + encoderDigest); String content = "一代宗师"; System.out.println("明文: " + content); String hmac = calculateRFC2104HMAC(content, encoderDigest); System.out.println("密文: " + hmac); } } 最终输出: Base64编码后的密钥:lwfmhK3H0qmTOfLGjDZ5HwHhz14enep7P7qXncxvNXWqUWWJMCvA6cqWP3GuvKtE2ArscZSF0lSaRH9jXg 明文: 美女 密文: 719e053be349ca02a721a3d6b509e84e21f7a0c5
本文出自 “一代宗师” 博客,请务必保留此出处http://765682.blog.51cto.com/755682/1854038
以上是关于HmacSHA 和HmacMd5 加密算法实现的主要内容,如果未能解决你的问题,请参考以下文章
我可以通过加盐现有的 MD5 散列并使用 Scrypt 或 PBKDF2 HMACSHA256 散列结果来提高 MD5 散列密码的安全性吗?