java HMAC_SHA1加密算法

CreationTime--2018年7月14日16点46分

Author:Marydon

1.准备工作

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.log4j.Logger; /**
* HMAC_SHA1加密算法工具类
* @explain 不可逆算法
* @author Marydon
* @creationTime 2018年7月7日上午11:06:58
* @version 1.0
* @since
* @email
*/
public class HMAC_SHA1Utils { private static Logger log = Logger.getLogger(HMAC_SHA1Utils.class);
// 加密方法
private static final String MAC_NAME = "HmacSHA1";
// 定义字符集
private static final String ENCODING = "UTF-8";
}

2.HMAC_SHA1加密

/**
* 使用HMAC_SHA1算法进行加密
* @explain
* @param paramStr
* 待加密字符串
* @param key
* 密钥(长度不限、可以为中文、英文、16进制字符串)
* @return 16进制加密字符串,长度固定为40
* @throws Exception
*/
public static String encrypt(String paramStr, String key) {
// 用于存储加密后的16进制字符串
String cipher = "";
try {
//
byte[] data = key.getBytes(ENCODING);
// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
// 生成HmacSHA1专属密钥
SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
// 生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance(MAC_NAME);
// 用给定密钥初始化 Mac 对象
mac.init(secretKey);
byte[] text = paramStr.getBytes(ENCODING);
// 完成 Mac 操作
byte[] encryptByte = mac.doFinal(text);
// 将byte[]-->hexString
cipher = ByteUtils.toHex(encryptByte);
} catch (Exception e) {
e.printStackTrace();
log.error("HMACSHA1加密失败:" + e.getMessage());
}
log.info("HMACSHA1加密结果:" + cipher);
return cipher;
}

3.校验

/**
* 判断源数据与加密数据是否一致
* @explain
* @param srcStr
* 原字符串
* @param secretStr
* 16进制加密字符串
* @param key
* 密钥
* @return 校验结果
*/
public static boolean verify(String srcStr, String secretStr, String key) {
boolean flag = false;
String cipherText = encrypt(srcStr, key);
if (cipherText.equals(secretStr))
flag = true;
return flag;
}

4.测试

/**
* 测试
* @param args
*/
public static void main(String[] args) { String json = "{\"name\":\"Marydon\",\"website\":\"http://www.cnblogs.com/Marydon20170307\"}";
String key = "测试";
String cipher = HMAC_SHA1Utils.encrypt(json, key);
System.out.println(cipher);
System.out.println(HMAC_SHA1Utils.verify(json, cipher, key)); }
 

java HMAC_SHA1加密算法的更多相关文章

  1. java sm3加密算法

      java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...

  2. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  3. java单向加密算法小结(1)--Base64算法

    从这一篇起整理一下常见的加密算法以及在java中使用的demo,首先从最简单的开始. 简单了解 Base64严格来说并不是一种加密算法,而是一种编码/解码的实现方式. 我们都知道,数据在计算机网络之间 ...

  4. [Java 安全]加密算法

    Base64编码 算法简述 定义 Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别. Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的A ...

  5. java基本加密算法

    简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algor ...

  6. JAVA 上加密算法的实现用例---转载

    通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman 的使用. 第 1 章基础知识 ...

  7. Java中加密算法介绍及其实现

    1.Base64编码算法 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...

  8. JAVA 上加密算法的实现用例,MessageDigest介绍

    第 1 章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快 ...

  9. JAVA 非对称加密算法RSA

    非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAP ...

随机推荐

  1. java含有静态代码块新建的时候报错java.lang.ExceptionInInitializerError

    问题描述 最近在写一些单元测试用例,为了避免连接外界服务,所有选择mock了数据库Dao层,计划将数据库所需要的数据存在List中,在类加载的时候初始化List并且填充数据.代码如下: public ...

  2. 5.数字拆分成4段,怎样使得4段的乘积最小【dp】

    题目是:给出一个数字(10,000-100,000,000),把这个数字拆分成4段,怎样使得4段的乘积最小.比如12345拆分成1*2*3*45=270, 10000=1*00*0*0=0. 解题分析 ...

  3. Valid Number leetcode java

    题目: Validate if a given string is numeric. Some examples: "0" => true " 0.1 " ...

  4. centos 下 mysql+keepalived实现双主自由切换

    目录 ip规划 mysql双主配置 keepalived配置 mysql1中keepalived的配置 mysql2中keepalived的配置 VIP漂移检测 本文的目的是搭建一个互为主从的mysq ...

  5. jquery ajax跨域

    JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问 方法一: jsonp之 getJSON js var ...

  6. Packagist 镜像使用方法--composer

    镜像用法 有两种方式启用本镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中.见“方法一” 单个项目配置: 将配置信息添加到某个项目的 com ...

  7. Lucene的查询语法,JavaCC及QueryParser(1)

    http://www.cnblogs.com/forfuture1978/archive/2010/05/08/1730200.html 一.Lucene的查询语法 Lucene所支持的查询语法可见h ...

  8. Java-JUC(三):原子性变量与CAS算法

    原子性 并发程序正确地执行,必须要保证原子性.可见性以及有序性.只要有一个没有被保证,就有可能会导致程序运行不正确. 原子性:一个操作或多个操作要么全部执行完成且执行过程不被中断,要么就不执行. 可见 ...

  9. IC卡制作常识概述

    ic卡主要有9种:    1.接触型IC卡:    2.非接触型IC卡:    3.串行传输型IC卡:    4.并行传输型IC卡:    5.存储型IC卡:    6.智能型IC卡:    7.超级 ...

  10. .NET 托管、非托管、本地:这些代码有什么区别?

    http://www.codeguru.com/Csharp/.NET/cpp_managed/article.php/c4871 本文内容 什么是托管代码? 什么是非托管代码? 什么是本地代码? 托 ...