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(data,key) HmacSHA256(data,key) HmacMD5(data,key)
基于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.非对称类型(含...
对称加解密 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,
压缩包内包含加密解密帮助类,包含功能:MD5 加密,加盐MD5加密,SHA 加密,SHA256 加密,SHA512 加密,HmacSha1 加密,HmacSha256 加密,HmacSha512 加密,HmacSha384 加密,HmacMd5 加密,HmacRipeMd160 加密,AES...
对称密码术HmacMD5 HmacSHA1 HmacSHA256联系人 (或者 esper.net 上的 #Akkarin)使用运行 maven 时,您可以简单地将新的依赖项与我们的存储库一起添加到您的pom.xml : < repository> < id>torchmind</ id> < url>...
’DES’,’RC4’,’Rabbit’,’TripleDES’,’Base64’,’MD5’,’SHA1’,’SHA224’,’SHA256’,’SHA384’,’SHA512’,’HmacSHA1’,’HmacSHA224’,’HmacSHA256’,’HmacSHA384’,’HmacSHA512’,’HmacMD5’]) ...
6.字符串哈希算法:MD5、SHA1、RIPEMD160、SHA256、Tiger、SHA512、Whirlpool、CRC32、HmacSha1、HmacSha256、HmacMd5 7.URI编码解码 8.Base64编码解码,文件Base64编码 9.硬盘序列号、网卡物理地址 10.http、...
NSString类别,用于MD5,SHA1,SHA256,SHA512哈希和具有较小内存使用量的文件的哈希 NSString哈希方法 string.md5String string.sha1String string.sha256String string.sha512String HMAC哈希方法 [string ...
var hash = CryptoJS.HmacMD5('Message', 'Secret Passphrase').toString(); // '5e03d0c1b42ef0b7e61fb333f3993949' var hash = CryptoJS.HmacSHA1('Message', 'Secret Passphrase').toString(); var hash =
com.jcraft.jsch.jce.MD5.class ...com.jcraft.jsch.jce.HMACMD5.class com.jcraft.jsch.jce.BlowfishCBC.class com.jcraft.jsch.jce.KeyPairGenDSA.class com.jcraft.jsch.jce.DH.class com.jcraft.jsch.DHGEX.class ...