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. 《OSPF和IS-IS详解》

    <OSPF和IS-IS详解> 基本信息 作者: (美)Jeff Doyle 译者: 孙余强 出版社:人民邮电出版社 ISBN:9787115347886 上架时间:2014-4-25 出版 ...

  2. SVG.js 图案使用和use引用

    一.SVG.Pattern 图案设置 var draw = SVG('svg1').size(300, 300); //SVG.Pattern 图案设置 var pattern = draw.patt ...

  3. 深度学习在推断阶段(inference)的硬件实现方法概述

    推断(Inference),就是深度学习把从训练中学习到的能力应用到工作中去. 精心调整权值之后的神经网络基本上就是个笨重.巨大的数据库.为了充分利用训练的结果,完成现实社会的任务,我们需要的是一个能 ...

  4. [转]抢先Mark!微信公众平台开发进阶篇资源集锦

    FROM : http://www.csdn.net/article/2014-08-01/2820986 由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在 ...

  5. [转]Windows 下 Apache Virtual hosts 简单配置

    From : http://blog.csdn.net/wuerping/article/details/4164362 /* Author : Andrew.Wu [ Created on : 20 ...

  6. SpringBoot整合Quartz定时任务 系统job Spring Boot教程 调度任务

    原文地址:https://www.cnblogs.com/allalongx/p/8477368.html 构建工程 创建一个Springboot工程,在它的程序入口加上@EnableScheduli ...

  7. 使用nginx反向代理到不同服务器(共享同一端口)配置文件

    使用nginx反向代理到不同服务器(共享同一端口)配置文件 https://blog.csdn.net/wang_k_123/article/details/72779443 https://www. ...

  8. 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 ...

  9. Port already be taken

    我运行同一个docker run命令两次后,第二次给出提示,说端口已经被占用. Port has already been allocated [解决方法] 运行docker container ls ...

  10. Git直接拉取远程分支

    用Git,一直有个疑惑,可不可以不拉取远程Origin主干,我直接pull一个分支下来 今天想了一下,找到了一个办法 本地分支关联 // 0.新建一个文件夹,然后初始化git git init // ...