`

HmacMD5/HmacSHA/HmacSHA256/HmacSHA384/HmacSHA512

 
阅读更多

package qeeka.test.qeeka.test;

import java.security.InvalidKeyException;

import java.security.Key;

import java.security.NoSuchAlgorithmException;

import javax.crypto.KeyGenerator;

import javax.crypto.Mac;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

/**

 * Hmac<br/>

 * algorithm HmacMD5/HmacSHA/HmacSHA256/HmacSHA384/HmacSHA512

 * @author Aub

 */

public class Hmac {

 

 /**

  * 根据给定密钥生成算法创建密钥

  * 

  * @param algorithm

  *            密钥算法

  * @return 密钥

  * @throws RuntimeException

  *             当 {@link java.security.NoSuchAlgorithmException} 发生时

  */

 private static byte[] getHmacKey(String algorithm){

  //初始化KeyGenerator

  KeyGenerator keyGenerator = null;

  try {

   keyGenerator = KeyGenerator.getInstance(algorithm);

  } catch (NoSuchAlgorithmException e) {

   throw new RuntimeException(e.getMessage());

  }

  //产生密钥

  SecretKey secretKey = keyGenerator.generateKey();

  //获得密钥

  return secretKey.getEncoded();

 }

 

 /**

  * 获取 HmaMD5的密钥

  * 

  * @return  HmaMD5的密钥

  * @throws RuntimeException

  *             当 {@link java.security.NoSuchAlgorithmException} 发生时

  */

 public static byte[] getHmaMD5key(){

  return getHmacKey("HmacMD5");

 }

 

 /**

  * 获取 HmaSHA的密钥

  * 

  * @return  HmaSHA的密钥

  * @throws RuntimeException

  *             当 {@link java.security.NoSuchAlgorithmException} 发生时

  */

 public static byte[] getHmaSHAkey(){

  return getHmacKey("HmacSHA1");

 }

 

 /**

  * 获取 HmaSHA256的密钥

  * 

  * @return  HmaSHA256的密钥

  * @throws RuntimeException

  *             当 {@link java.security.NoSuchAlgorithmException} 发生时

  */

 public static byte[] getHmaSHA256key(){

  return getHmacKey("HmacSHA256");

 }

 

 /**

  * 获取 HmaSHA384的密钥

  * 

  * @return  HmaSHA384的密钥

  * @throws RuntimeException

  *             当 {@link java.security.NoSuchAlgorithmException} 发生时

  */

 public static byte[] getHmaSHA384key(){

  return getHmacKey("HmacSHA384");

 }

 

 /**

  * 获取 HmaSHA512的密钥

  * 

  * @return  HmaSHA384的密钥

  * @throws RuntimeException

  *             当 {@link java.security.NoSuchAlgorithmException} 发生时

  */

 public static byte[] getHmaSHA512key(){

  return getHmacKey("HmacSHA512");

 }

 

 /**

  * 转换密钥

  * 

  * @param key 二进制密钥

  * @param algorithm 密钥算法

  * @return 密钥

  */

 private static Key toKey(byte[] key,String algorithm){

  //生成密钥

  return new SecretKeySpec(key, algorithm);

 }

 

 /**

  * 使用HmacMD5消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacMD5(byte[] data, Key key){

  Mac mac = null;

  try {

   mac = Mac.getInstance("HmacMD5");

   mac.init(key);

  } catch (NoSuchAlgorithmException e) {

   e.printStackTrace();

   return new byte[0];

  }catch (InvalidKeyException e) {

   e.printStackTrace();

   return new byte[0];

  }

  return mac.doFinal(data);

 }

 

 /**

  * 使用HmacMD5消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacMD5(byte[] data, byte[] key){

  Key k = toKey(key, "HmacMD5");

  return encodeHmacMD5(data, k);

 }

 

 /**

  * 使用HmacSHA消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA(byte[] data, Key key){

  Mac mac = null;

  try {

   mac = Mac.getInstance("HmacSHA1");

   mac.init(key);

  } catch (NoSuchAlgorithmException e) {

   e.printStackTrace();

   return new byte[0];

  }catch (InvalidKeyException e) {

   e.printStackTrace();

   return new byte[0];

  }

  return mac.doFinal(data);

 }

 

 /**

  * 使用HmacSHA消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA(byte[] data, byte[] key){

  Key k = toKey(key, "HmacSHA1");

  return encodeHmacSHA(data, k);

 }

 

 /**

  * 使用HmacSHA256消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA256(byte[] data, Key key){

  Mac mac = null;

  try {

   mac = Mac.getInstance("HmacSHA256");

   mac.init(key);

  } catch (NoSuchAlgorithmException e) {

   e.printStackTrace();

   return new byte[0];

  }catch (InvalidKeyException e) {

   e.printStackTrace();

   return new byte[0];

  }

  return mac.doFinal(data);

 }

 

 /**

  * 使用HmacSHA256消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA256(byte[] data, byte[] key){

  Key k = toKey(key, "HmacSHA256");

  return encodeHmacSHA256(data, k);

 }

 

 

 /**

  * 使用HmacSHA384消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA384(byte[] data, Key key){

  Mac mac = null;

  try {

   mac = Mac.getInstance("HmacSHA384");

   mac.init(key);

  } catch (NoSuchAlgorithmException e) {

   e.printStackTrace();

   return new byte[0];

  }catch (InvalidKeyException e) {

   e.printStackTrace();

   return new byte[0];

  }

  return mac.doFinal(data);

 }

 

 /**

  * 使用HmacSHA384消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA384(byte[] data, byte[] key){

  Key k = toKey(key, "HmacSHA384");

  return encodeHmacSHA384(data, k);

 }

 

 

 

 /**

  * 使用HmacSHA512消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA512(byte[] data, Key key){

  Mac mac = null;

  try {

   mac = Mac.getInstance("HmacSHA512");

   mac.init(key);

  } catch (NoSuchAlgorithmException e) {

   e.printStackTrace();

   return new byte[0];

  }catch (InvalidKeyException e) {

   e.printStackTrace();

   return new byte[0];

  }

  return mac.doFinal(data);

 }

 

 /**

  * 使用HmacSHA512消息摘要算法计算消息摘要

  * 

  * @param data 做消息摘要的数据

  * @param key 密钥

  * @return 消息摘要(长度为16的字节数组)

  */

 public static byte[] encodeHmacSHA512(byte[] data, byte[] key){

  Key k = toKey(key, "HmacSHA512");

  return encodeHmacSHA512(data, k);

 }

 

 

 private static String  showByteArray(byte[] data){

  if(null == data){

   return null;

  }

  StringBuilder sb = new StringBuilder("{");

  for(byte b:data){

   sb.append(b).append(",");

  }

  sb.deleteCharAt(sb.length()-1);

  sb.append("}");

  return sb.toString();

 }

 

 public static void main(String[] args) {

//  byte[] key = getHmaMD5key();

//  byte[] key = getHmaSHAkey();

//  byte[] key = getHmaSHA256key();

//  byte[] key = getHmaSHA384key();

  byte[] key = getHmaSHA512key();

  

  

  System.out.println("加密密钥: byte[]:"+showByteArray(key).length());

  

  String data = "Mac数据";

  System.out.println("加密前数据: string:"+data);

  System.out.println("加密前数据: byte[]:"+showByteArray(data.getBytes()));

  System.out.println();

//  byte[] encodeData = encodeHmacMD5(data.getBytes(), key);

//  byte[] encodeData = encodeHmacSHA(data.getBytes(), key);

//  byte[] encodeData = encodeHmacSHA256(data.getBytes(), key);

//  byte[] encodeData = encodeHmacSHA384(data.getBytes(), key);

  byte[] encodeData = encodeHmacSHA512(data.getBytes(), key);

  System.out.println("加密后数据: byte[]:"+showByteArray(encodeData).length());

  System.out.println("加密后数据: byte[]:"+encodeData.length);

  System.out.println("加密后数据: hexStr:"+Hex.encodeHexStr(encodeData));

  System.out.println();

 }

}

 

 

 

分享到:
评论

相关推荐

    TCN_Toolkit:Transcoding_Cipher_Network_Toolkit

    支持HASH加密和加盐(任选),包括MD5 / SHA-1 / SHA256 / SHA382 / SHA512 / HMACMD5 / HMACSHA1 / HMACSHA256 / HMACSHA382 / HMACSHA512。 对称加密算法 1.支持DES,3DES,AES加解密,输出格式包括BASE64(UTF-8...

    hmac.dll (HMACSHA1、HMACSHA256、HMACMD5)

    HMACSHA1、HMACSHA256和HMACMD5是使用不同哈希算法实现的HMAC变体: 1. HMAC-SHA1:使用SHA-1哈希算法。SHA-1虽然在安全性上较弱,但速度相对较快,曾经被广泛使用。然而,由于其存在碰撞攻击的风险,现在已被更...

    Encryption

    基于Base64,MD5,SHA,Hmac,DES,AES,RSA信息加密的设计与实现。 ...实现HmacMD5,HmacSHA1,HmacSHA256,HmacSHA384,HmacSHA512对于文字的加密。 实现了对称加密算法DES和AES. 实现了非对称加密算法RSA.

    各种加密解密在线演示

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

    delphi7调用动态库实现HMACSHA编码

    delphi7调用动态库实现HMACSHA1、HMACSHA256、HMACSHA512、HMACMD5编码(没找到delphi7实现HMACSHA的简单方案,用VC基于openssl写了个给delphi7调用),并转化为BASE64字符串

    aliyun三要素生成password(md5,sha1,sha256).rar

    三要素生成password,包括hmacmd5,hmacsha1,hmacsha256三种,已验证无误。另外有hashmd5,hashsha1,hashsha256算法.https://blog.csdn.net/zn2857/article/details/117881499

    Extraor.Util.Security.zip

    1.散列类型:MD5, SHA1, SHA256, SHA384, SHA512, RIPEMD160, CRC32, HMACMD5, HMACSHA1, HMACSHA256, HMACSHA384, HMACSHA512, HMACRIPEMD160; 2.对称类型(含文件加/解密):DES, TripleDES, AES 3.非对称类型(含...

    Android MD5/AES/HMAC 加密

    Signature hmac = Signature.getInstance("HMACSHA256"); hmac.initSign(secretKey); hmac.update(message); byte[] signature = hmac.sign(); ``` 对于验证,使用`hmac.verify(signature)`。 在实际应用中,可能...

    常用加解密及编码转换工具

    对称加解密 AES 3DES SM4 DES RC4 ChaCha20 非对称加解密 RSA 支持指定长度密钥对生成 ...HmacMD5 HmacSHA1 HmacSHA256 HmacSHA384 HmacSHA512 SM3 SM4CMAC 编码转换 String Base64 Hex Url Unicode Byte 一键互转

    mycrypto:各种加密

    HmacSHA1,HmacSHA256,HmacSHA384,HmacSHA512,CRC对称加密DES、3DES、AES、IDEA, PBE目前AES加密未被破解,为有效算法非对称加密RSA、ElGamal、椭圆曲线系列算法,DH算法DH算法:需要在%JRE_HOME%\lib\security ...

    Qt加密算法md5,sha256,sha1

    ## 说明 此程序可以进行sha1,sha256,md5的加密 在input输入框内输入所需加密的数据,然后点击"encryption"按扭即可实现加密; 默认input输入框内的数据为123456

    MQTT_PASSWD算法工具.rar

    支持hmacmd5,hmacsha1和hmacsha256 2. 三元组接入示例 2.1 设备三元组信息 设备三元组 productKey = a14Xib5kdYd deviceName = light1983432 deviceSecret = oLyaKqVxtRvjH284LdhqVgVUx1UPy6zq 建立MQTT连接...

    Vive.Crypto:Vive.Crypto实现了C#、Java 和 JS 的SM3,SM4的相互加密解密;以及对各种常用的加密算法进行封装,有 Base64、对称加密(DES、3DES、AES、SM4)、非对称加密(RSA、SM2)、Hash(MD4、MD5、HMAC、HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512、SHA、SHA1、SHA256、SHA384、SHA512、SM3)等实现

    Vive.Crypto(Vive....实现了C#、Java 和 JS 的SM3,SM4的相互加密解密////// 哈希加密类型/// public enum HashingProviderType{HMACMD5 = 1,HMACSHA1 = 2,HMACSHA256 = 3,HMACSHA384 = 4,HMACSHA512 = 5,MD4 = 6,

    下载来的iOS swift 写的HMAC_SHA1和MD5加密

    let hmacMD5 = message.hmac(using: MD5.self) ``` 总的来说,了解如何在Swift中使用HMAC和MD5进行数据加密是非常有用的技能,尤其是在构建需要保护用户数据的应用中。然而,为了提供更高的安全性,开发者应考虑...

    各种方法加密解密类.zip

    压缩包内包含加密解密帮助类,包含功能:MD5 加密,加盐MD5加密,SHA 加密,SHA256 加密,SHA512 加密,HmacSha1 加密,HmacSha256 加密,HmacSha512 加密,HmacSha384 加密,HmacMd5 加密,HmacRipeMd160 加密,AES...

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

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

    Padlock:为 API 客户端提供简单的认证系统

    对称密码术HmacMD5 HmacSHA1 HmacSHA256联系人 (或者 esper.net 上的 #Akkarin)使用运行 maven 时,您可以简单地将新的依赖项与我们的存储库一起添加到您的pom.xml : &lt; repository&gt; &lt; id&gt;torchmind&lt;/ id&gt; &lt; url&gt;...

    .net 数据加密算法

    SHA:SHA类包括SHA1CryptoServiceProvider、SHA256Managed、SHA384Managed和SHA512Managed,分别实现了SHA-1、SHA-256、SHA-384和SHA-512哈希算法。 HMAC:HMAC类,如HMACMD5、HMACSHA1等,提供基于密钥的消息...

    HMAC-SHA1含密钥的安全哈希算法

    `HMACMD5.csp`和`.ncb`可能是HMAC-MD5的相应文件,而`.plg`文件可能记录了编译或构建的输出信息。`sha1.h`可能是包含SHA1哈希函数定义的头文件。 HMAC-SHA1常用于网络安全,如HTTPS协议中的TLS/SSL握手,数字签名,...

    metools-crx插件

    ’DES’,’RC4’,’Rabbit’,’TripleDES’,’Base64’,’MD5’,’SHA1’,’SHA224’,’SHA256’,’SHA384’,’SHA512’,’HmacSHA1’,’HmacSHA224’,’HmacSHA256’,’HmacSHA384’,’HmacSHA512’,’HmacMD5’]) ...

Global site tag (gtag.js) - Google Analytics