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();
}
}
相关推荐
支持HASH加密和加盐(任选),包括MD5 / SHA-1 / SHA256 / SHA382 / SHA512 / HMACMD5 / HMACSHA1 / HMACSHA256 / HMACSHA382 / HMACSHA512。 对称加密算法 1.支持DES,3DES,AES加解密,输出格式包括BASE64(UTF-8...
HMACSHA1、HMACSHA256和HMACMD5是使用不同哈希算法实现的HMAC变体: 1. HMAC-SHA1:使用SHA-1哈希算法。SHA-1虽然在安全性上较弱,但速度相对较快,曾经被广泛使用。然而,由于其存在碰撞攻击的风险,现在已被更...
基于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调用动态库实现HMACSHA1、HMACSHA256、HMACSHA512、HMACMD5编码(没找到delphi7实现HMACSHA的简单方案,用VC基于openssl写了个给delphi7调用),并转化为BASE64字符串
三要素生成password,包括hmacmd5,hmacsha1,hmacsha256三种,已验证无误。另外有hashmd5,hashsha1,hashsha256算法.https://blog.csdn.net/zn2857/article/details/117881499
1.散列类型:MD5, SHA1, SHA256, SHA384, SHA512, RIPEMD160, CRC32, HMACMD5, HMACSHA1, HMACSHA256, HMACSHA384, HMACSHA512, HMACRIPEMD160; 2.对称类型(含文件加/解密):DES, TripleDES, AES 3.非对称类型(含...
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 一键互转
HmacSHA1,HmacSHA256,HmacSHA384,HmacSHA512,CRC对称加密DES、3DES、AES、IDEA, PBE目前AES加密未被破解,为有效算法非对称加密RSA、ElGamal、椭圆曲线系列算法,DH算法DH算法:需要在%JRE_HOME%\lib\security ...
## 说明 此程序可以进行sha1,sha256,md5的加密 在input输入框内输入所需加密的数据,然后点击"encryption"按扭即可实现加密; 默认input输入框内的数据为123456
支持hmacmd5,hmacsha1和hmacsha256 2. 三元组接入示例 2.1 设备三元组信息 设备三元组 productKey = a14Xib5kdYd deviceName = light1983432 deviceSecret = oLyaKqVxtRvjH284LdhqVgVUx1UPy6zq 建立MQTT连接...
Vive.Crypto(Vive....实现了C#、Java 和 JS 的SM3,SM4的相互加密解密////// 哈希加密类型/// public enum HashingProviderType{HMACMD5 = 1,HMACSHA1 = 2,HMACSHA256 = 3,HMACSHA384 = 4,HMACSHA512 = 5,MD4 = 6,
let hmacMD5 = message.hmac(using: MD5.self) ``` 总的来说,了解如何在Swift中使用HMAC和MD5进行数据加密是非常有用的技能,尤其是在构建需要保护用户数据的应用中。然而,为了提供更高的安全性,开发者应考虑...
压缩包内包含加密解密帮助类,包含功能:MD5 加密,加盐MD5加密,SHA 加密,SHA256 加密,SHA512 加密,HmacSha1 加密,HmacSha256 加密,HmacSha512 加密,HmacSha384 加密,HmacMd5 加密,HmacRipeMd160 加密,AES...
Vue-常用加密(MD5, DES, SHA256, BASE64, SHA1, RSA) Vue 中常见的加密算法可以分成三类:对称加密算法、非对称加密算法和 Hash 算法。下面将详细介绍每种加密算法的特点、优点和缺点,以及它们的应用场景。 一...
对称密码术HmacMD5 HmacSHA1 HmacSHA256联系人 (或者 esper.net 上的 #Akkarin)使用运行 maven 时,您可以简单地将新的依赖项与我们的存储库一起添加到您的pom.xml : < repository> < id>torchmind</ id> < url>...
SHA:SHA类包括SHA1CryptoServiceProvider、SHA256Managed、SHA384Managed和SHA512Managed,分别实现了SHA-1、SHA-256、SHA-384和SHA-512哈希算法。 HMAC:HMAC类,如HMACMD5、HMACSHA1等,提供基于密钥的消息...
`HMACMD5.csp`和`.ncb`可能是HMAC-MD5的相应文件,而`.plg`文件可能记录了编译或构建的输出信息。`sha1.h`可能是包含SHA1哈希函数定义的头文件。 HMAC-SHA1常用于网络安全,如HTTPS协议中的TLS/SSL握手,数字签名,...
’DES’,’RC4’,’Rabbit’,’TripleDES’,’Base64’,’MD5’,’SHA1’,’SHA224’,’SHA256’,’SHA384’,’SHA512’,’HmacSHA1’,’HmacSHA224’,’HmacSHA256’,’HmacSHA384’,’HmacSHA512’,’HmacMD5’]) ...