java Hmac加解密

简介: java Hmac加解密

public class HmacVgUtil {

private static final String HMACMD5 = "HmacMD5";
private static final String HMACSHA1 = "HmacSHA1";
private static final String CHARSET_UTF8 = "UTF-8";
/** 密钥 **/
private static final String MAC_KEY = "abcdef";

/**
 * 计算待签名字符串的 HMAC-MD5 值
 * @param bytes
 * @param key
 * @return
 * @throws IOException 
 * @throws NoSuchAlgorithmException 
 */
public static byte[] encrypt(byte[] bytes, String key) throws Exception {
    if (isEmpty(key)) {
        throw new IOException("secret can not be empty");
    }
    
    SecretKey skey = new SecretKeySpec(key.getBytes("UTF-8"), HMACMD5);
    Mac mac = Mac.getInstance(HMACMD5);
    mac.init(skey);
    mac.update(bytes);

    return mac.doFinal();
}

/**
 * 计算待签名字符串的 HMAC-SHA1 值
 */
public static byte[] hmacSHA1Signature(String key, String baseString) throws Exception {
    if (isEmpty(key)) {
        throw new IOException("secret can not be empty");
    }
    if (isEmpty(baseString)) {
        return null;
    }
    Mac mac = Mac.getInstance("HmacSHA1");
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET_UTF8), HMACSHA1);
    mac.init(keySpec);
    
    return mac.doFinal(baseString.getBytes(CHARSET_UTF8));
}

private static boolean isEmpty(String str) {
    return (str == null || str.length() == 0);
}

/**
 * 计算待签名字符串的 HMAC-MD5 值(Key是16进制字符串时使用)
 * @param bytes
 * @param key
 * @return
 * @throws Exception
 */
public static byte[] encrypt1(byte[] bytes, String key) throws Exception {
    if (isEmpty(key)) {
        throw new IOException("secret can not be empty");
    }
     int m = 0, n = 0;
    int l = key.length() / 2;
    byte[] ret = new byte[l];
    for (int i = 0; i < l; i++) {
        m = i * 2 + 1;
        n = m + 1;
        ret[i] = Byte.decode("0x" + key.substring(i * 2, m) + key.substring(m, n));
    }
    SecretKey skey = new SecretKeySpec(ret, HMACMD5);
    Mac mac = Mac.getInstance(HMACMD5);
    mac.init(skey);
    mac.update(bytes);

    return mac.doFinal();
}

}

相关文章
|
5月前
|
算法 安全 Java
Java 实现 RSA 非对称加密算法-加解密和签名验签
Java 实现 RSA 非对称加密算法-加解密和签名验签
228 0
|
5月前
|
Java 数据安全/隐私保护
Java 中使用 OpenSSL 生成公钥私钥进行数据加解密
Java 中使用 OpenSSL 生成公钥私钥进行数据加解密
114 0
|
5月前
|
存储 算法 安全
java des加解密啊
【2月更文挑战第8天】
|
Java Shell Maven
JAVA实现PGP/GPG加解密加验签
JAVA实现PGP/GPG加解密加验签
2308 0
|
算法 Java 数据安全/隐私保护
【算法】Java实现HMAC算法
HMAC(Hash-based Message Authentication Code)是一种基于哈希函数的消息认证码算法。它结合了密钥和哈希函数,用于对消息进行完整性校验和认证。HMAC算法通过在消息上应用哈希函数,并使用密钥来生成固定长度的认证码,以确保消息的完整性和身份验证
396 0
|
存储 移动开发 前端开发
前后端RSA互相加解密、加签验签、密钥对生成(Java)
最近有一些安全性要求比较高的场景,我们提供API给第三方商户用于收单,其中有几个功能是绑卡、ATM/POS密码变更。
前后端RSA互相加解密、加签验签、密钥对生成(Java)
|
编解码 前端开发 算法
前端CryptoJS和Java后端数据互相加解密(AES)
最近刚好在做一个简单的保险代理人运营平台,主要是为了方便个人展业,由于有些客户数据比较敏感,所以在用户登录时准备对登录密码进行一波加密后再传输。
前端CryptoJS和Java后端数据互相加解密(AES)
|
算法 Java
java的DES和3DES加解密算法
java的DES和3DES加解密算法
|
算法 Java 数据安全/隐私保护
最新版-Python和Java实现Aes相互加解密
最新版-Python和Java实现Aes相互加解密
272 0
|
算法 Java
Java使用Cipher.getInstance(“AES/ECB/PKCS5Padding“);加解密算法工具类实现
Java使用Cipher.getInstance(“AES/ECB/PKCS5Padding“);加解密算法工具类实现
363 0