Java基于HmacSHA1实现不可逆加密

package cn.orz.utlis;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

public class HmacSHA1 {

 /**
     * 【调用加密算法】
     * @param data
     * @param key
     * @return 返回加密后结果
     */
    public  static  String HmacSHA1Encode(String data, String key) {
        byte[] dataBytes = data.getBytes();
        byte[] keyBytes = key.getBytes();
        String result = hamcsha1(dataBytes, keyBytes);
        return result;
    }


    public static String byte2hex(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toUpperCase();
    }

    /**
     * 【HmacSHA1加密算法实现】
     * @param data
     * @param key
     * @return 返回加密后的密文字符串
     */
    public static String hamcsha1(byte[] data, byte[] key) {
        try {
            SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
            Mac mac = Mac.getInstance("HmacSHA1");
            mac.init(signingKey);
            return byte2hex(mac.doFinal(data));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
        return null;
    }

   
}

Java中的HmacSHA1加密算法可以通过Java标准库中的javax.crypto包来实现。下面是一个示例代码: ```java import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class HmacSHA1Example { public static void main(String[] args) { String message = "Hello, World!"; String key = "SecretKey"; try { // 创建一个密钥对象 SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "HmacSHA1"); // 创建一个HmacSHA1算法实例 Mac mac = Mac.getInstance("HmacSHA1"); // 初始化算法实例并设置密钥 mac.init(secretKeySpec); // 对消息进行加密 byte[] encryptedBytes = mac.doFinal(message.getBytes()); // 将加密结果转换为十六进制字符串 StringBuilder sb = new StringBuilder(); for (byte b : encryptedBytes) { sb.append(String.format("%02x", b)); } String encryptedMessage = sb.toString(); System.out.println("加密后的消息:" + encryptedMessage); } catch (NoSuchAlgorithmException | InvalidKeyException e) { e.printStackTrace(); } } } ``` 在上面的示例代码中,我们使用了HmacSHA1算法对消息进行加密。首先,我们创建了一个密钥对象,然后使用HmacSHA1算法实例进行初始化并设置密钥。接下来,通过调用`doFinal`方法对消息进行加密,得到一个字节数组。最后,我们将字节数组转换为十六进制字符串,以便于显示和传输加密结果。 请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体需求进行适当的修改和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值