java HMAC_SHA1加密算法
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
*/
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加密算法的更多相关文章
- java sm3加密算法
java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- java单向加密算法小结(1)--Base64算法
从这一篇起整理一下常见的加密算法以及在java中使用的demo,首先从最简单的开始. 简单了解 Base64严格来说并不是一种加密算法,而是一种编码/解码的实现方式. 我们都知道,数据在计算机网络之间 ...
- [Java 安全]加密算法
Base64编码 算法简述 定义 Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别. Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的A ...
- java基本加密算法
简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algor ...
- JAVA 上加密算法的实现用例---转载
通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman 的使用. 第 1 章基础知识 ...
- Java中加密算法介绍及其实现
1.Base64编码算法 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...
- JAVA 上加密算法的实现用例,MessageDigest介绍
第 1 章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快 ...
- JAVA 非对称加密算法RSA
非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAP ...
随机推荐
- 《OSPF和IS-IS详解》
<OSPF和IS-IS详解> 基本信息 作者: (美)Jeff Doyle 译者: 孙余强 出版社:人民邮电出版社 ISBN:9787115347886 上架时间:2014-4-25 出版 ...
- SVG.js 图案使用和use引用
一.SVG.Pattern 图案设置 var draw = SVG('svg1').size(300, 300); //SVG.Pattern 图案设置 var pattern = draw.patt ...
- 深度学习在推断阶段(inference)的硬件实现方法概述
推断(Inference),就是深度学习把从训练中学习到的能力应用到工作中去. 精心调整权值之后的神经网络基本上就是个笨重.巨大的数据库.为了充分利用训练的结果,完成现实社会的任务,我们需要的是一个能 ...
- [转]抢先Mark!微信公众平台开发进阶篇资源集锦
FROM : http://www.csdn.net/article/2014-08-01/2820986 由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在 ...
- [转]Windows 下 Apache Virtual hosts 简单配置
From : http://blog.csdn.net/wuerping/article/details/4164362 /* Author : Andrew.Wu [ Created on : 20 ...
- SpringBoot整合Quartz定时任务 系统job Spring Boot教程 调度任务
原文地址:https://www.cnblogs.com/allalongx/p/8477368.html 构建工程 创建一个Springboot工程,在它的程序入口加上@EnableScheduli ...
- 使用nginx反向代理到不同服务器(共享同一端口)配置文件
使用nginx反向代理到不同服务器(共享同一端口)配置文件 https://blog.csdn.net/wang_k_123/article/details/72779443 https://www. ...
- Is there anyway to discover which ip addresses are connected to the db?
From mongo shell run db.currentOp() to show all active connections or db.currentOp(true) to show all ...
- Port already be taken
我运行同一个docker run命令两次后,第二次给出提示,说端口已经被占用. Port has already been allocated [解决方法] 运行docker container ls ...
- Git直接拉取远程分支
用Git,一直有个疑惑,可不可以不拉取远程Origin主干,我直接pull一个分支下来 今天想了一下,找到了一个办法 本地分支关联 // 0.新建一个文件夹,然后初始化git git init // ...