java工具类3-签名加密
时间:2020-05-09
本文章向大家介绍java工具类3-签名加密,主要包括java工具类3-签名加密使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
import java.security.MessageDigest; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.dms.common.constant.CommonConstants; /** * 签名加密工具类<br/> * Date: 2018年<br/> * * @version * @see */ public class SignUtils { private static final Logger LOG = LoggerFactory.getLogger(SignUtils.class); //private static final String DEFAULT_CHARSET = "UTF-8"; private static final char[] DIGITS; public static String hmacSha256(String key, String data) { try { Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), mac.getAlgorithm()); mac.init(signingKey); return encodeHex(mac.doFinal(data.getBytes())); } catch (Exception e) { LOG.error("execute hmacSHA256 error",e); } return null; } public static String md5(String data, String charset) { try { byte[] msg = data.getBytes(charset); MessageDigest md = MessageDigest.getInstance("MD5"); return encodeHex(md.digest(msg)); } catch (Exception e) { LOG.error("execute MD5 error",e); } return null; } public static String sha256(String data, String charset) { try { byte[] msg = data.getBytes(charset); MessageDigest md = MessageDigest.getInstance("SHA-256"); return encodeHex(md.digest(msg)); } catch (Exception e) { LOG.error("execute SHA-256 error",e); } return null; } public static String sha1(String data, String charset) { try { byte[] msg = data.getBytes(charset); MessageDigest md = MessageDigest.getInstance("SHA1"); return encodeHex(md.digest(msg)); } catch (Exception e) { LOG.error("execute SHA1 error",e); } return null; } public static String sha1(String data) { return sha1(data, CommonConstants.DEFAULT_CHARSET); } private static String encodeHex(byte[] data) { int l = data.length; char[] out = new char[l << 1]; int i = 0; for (int j = 0; i < l; ++i) { out[j++] = DIGITS[(240 & data[i]) >>> 4]; out[j++] = DIGITS[15 & data[i]]; } return new String(out); } static { DIGITS = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; } }
原文地址:https://www.cnblogs.com/chong-zuo3322/p/12855036.html
- HDU 1863 畅通工程
- 最小生成树判断唯一
- React项目配置5(引入MockJs,实现假接口开发)
- POj 1611 The Suspects
- React项目配置4(如何在开发时跨域获取api请求)
- Laravel-博客实战+踩坑laravel-blog最终的效果踩的坑
- React项目配置3(如何管理项目API接口)
- React第三方组件3(状态管理之Flux的使用④TodoList下)
- React第三方组件3(状态管理之Flux的使用③TodoList中)
- Vue实现百度下拉提示搜索一、前期准备二、代码实现三、实现效果
- React第三方组件3(状态管理之Flux的使用②TodoList上)
- ggplot2玫瑰图案例——星巴克门店分布图
- React第三方组件3(状态管理之Flux的使用①简单使用)
- 用ggplot2画了一个我也叫不上名的炫酷图表
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【机器学习基础】机器学习中类别变量的编码方法总结
- 树莓派基础实验2:RGB-LED实验
- 【Python基础】Python画王者荣耀英雄能力雷达图
- 树莓派基础实验4:继电器实验
- 树莓派基础实验5:激光传感器实验
- 树莓派基础实验6:轻触开关按键实验
- 从 lsof 开始,深入理解 Linux 虚拟文件系统!
- 原来 8 张图,就可以搞懂「零拷贝」了
- 构造函数没有返回值是怎么赋值的?
- 高频手撕算法合集来了!
- 面试官:兄弟,说说 ArrayList 和 LinkedList 有什么区别
- 开源中文关系抽取框架,来自浙大知识引擎实验室
- EAST+CRNN银行卡号识别,附数据集
- 绝了!搜狗输入法这骚操作!
- Linux 中几个正则表达式的用法