jmeter HMAC_SHA1加密并输出hex,base64的值

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 记录下jmeter HMAC_SHA1加密,并打包成jar文件

hex

有的接口认证,需要加密HMAC_SHA1,输出加密后的hex
HmacUtil.java

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;


public class HmacUtil {
    //加密算法
    public static final String HMAC_SHA1 = "HmacSHA1";
    public static final String HMAC_MD5 = "HmacMD5";
    public static final String HMAC_SHA256 = "HmacSHA256";
    public static final String HMAC_SHA512 = "HmacSHA512";


   /**
    * 实现Hmac系列的加密算法HmacSHA1、HmacMD5等
    *
    * @param input 需要加密的输入参数
    * @param key 密钥
    * @param algorithm 选择加密算法
    * @return 加密后的值
    **/
    public static String encrypt(String input, String key, String algorithm) {
        String cipher = "";
        try {
            byte[] data = key.getBytes(StandardCharsets.UTF_8);
            //根据给定的字节数组构造一个密钥,第二个参数指定一个密钥的算法名称,生成HmacSHA1专属密钥
            SecretKey secretKey = new SecretKeySpec(data, algorithm);

            //生成一个指定Mac算法的Mac对象
            Mac mac = Mac.getInstance(algorithm);
            //用给定密钥初始化Mac对象
            mac.init(secretKey);
            byte[] text = input.getBytes(StandardCharsets.UTF_8);
            byte[] encryptByte = mac.doFinal(text);
            cipher = bytesToHexStr(encryptByte);
        } catch (NoSuchAlgorithmException | InvalidKeyException e) {
            e.printStackTrace();
        }
        return cipher;
    }


    /**
     * byte数组转16进制字符串
     *
     * @param  bytes byte数组
     * @return hex字符串
     */
    public static String bytesToHexStr(byte[] bytes) {
        StringBuilder hexStr = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            hexStr.append(hex);
        }
        return hexStr.toString();
    }

}

打包成jar包

$ javac HmacUtil.java
$ jar cvf HmacUtil.jar HmacUtil.class
已添加清单
正在添加: HmacUtil.class(输入 = 1810) (输出 = 1010)(压缩了 44%)

jmeter中引入jar
image.png
BeanShell添加以下代码,并设置变量sign

String sign = HmacUtil.encrypt("abcdefg", "g1LsvbcQU2D4", HmacUtil.HMAC_SHA1);

vars.put("sign",sign);

image.png

与在线加密工具比对加密后的内容 http://www.wetools.com/hmac
image.png

base64

如果你需要得到base64的值,可以更改一下代码

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class HmacUtil {
    //加密算法
    public static final String HMAC_SHA1 = "HmacSHA1";
    public static final String HMAC_MD5 = "HmacMD5";
    public static final String HMAC_SHA256 = "HmacSHA256";
    public static final String HMAC_SHA512 = "HmacSHA512";


   /**
    * 实现Hmac系列的加密算法HmacSHA1、HmacMD5等
    *
    * @param input 需要加密的输入参数
    * @param key 密钥
    * @param algorithm 选择加密算法
    * @return 加密后的值
    **/
    public static String encrypt(String input, String key, String algorithm) {
        String cipher = "";
        try {
            byte[] data = key.getBytes(StandardCharsets.UTF_8);
            //根据给定的字节数组构造一个密钥,第二个参数指定一个密钥的算法名称,生成HmacSHA1专属密钥
            SecretKey secretKey = new SecretKeySpec(data, algorithm);

            //生成一个指定Mac算法的Mac对象
            Mac mac = Mac.getInstance(algorithm);
            //用给定密钥初始化Mac对象
            mac.init(secretKey);
            byte[] text = input.getBytes(StandardCharsets.UTF_8);
            byte[] encryptByte = mac.doFinal(text);
            //cipher = bytesToHexStr(encryptByte);
            cipher = bytesToBase64(encryptByte);
        } catch (NoSuchAlgorithmException | InvalidKeyException e) {
            e.printStackTrace();
        }
        return cipher;
    }


    /**
     * byte数组转16进制字符串
     *
     * @param  bytes byte数组
     * @return hex字符串
     */
    public static String bytesToHexStr(byte[] bytes) {
        StringBuilder hexStr = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            hexStr.append(hex);
        }
        return hexStr.toString();
    }
    
    
    //转成base64字符串
    public static String bytesToBase64(byte[] bytes){
    String base64encodedString = Base64.getEncoder().encodeToString(bytes);
        return base64encodedString;
    }
}
目录
相关文章
|
6月前
|
Java 数据安全/隐私保护
des加密+base64编码,base64解码+des解密
des加密+base64编码,base64解码+des解密
128 0
|
6月前
|
数据安全/隐私保护
18、cookie注入(base64加密)
18、cookie注入(base64加密)
55 0
|
5月前
|
Go 数据安全/隐私保护
go 基于gin编写encode、decode、base64加密接口
go 基于gin编写encode、decode、base64加密接口
48 2
|
3月前
|
JavaScript 前端开发 Java
JMETER也会遇到加密难题,一并处理中文响应乱码
本文讨论了在JMeter中处理加密数据和中文响应乱码的问题,提供了使用BeanShell后处理器进行AES加密的示例代码,说明了如何将自定义的jar包放入JMeter的lib/ext目录以扩展功能,并给出了解决中文乱码的几种方法。
42 1
JMETER也会遇到加密难题,一并处理中文响应乱码
|
前端开发 JavaScript 数据安全/隐私保护
Jmeter模拟加密密码登录
Jmeter模拟加密密码登录
255 0
|
5月前
|
存储 Java 数据处理
Java的Base64加密解密详解
Java的Base64加密解密详解
|
6月前
|
移动开发 JavaScript 安全
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
267 0
|
6月前
|
Java 数据安全/隐私保护
java base64 加密 解密
java base64 加密 解密
|
6月前
|
数据安全/隐私保护
小课堂 -- cookie注入(base64加密)
小课堂 -- cookie注入(base64加密)
49 0
|
6月前
|
数据安全/隐私保护 C++
c++实现http客户端和服务端的开源库以及Base64加密密码
c++实现http客户端和服务端的开源库以及Base64加密密码