数据加密辅助类(默认编码UTF-8)

public final class SecurityUtil {private SecurityUtil() {}/*** 默认算法密钥*/private static final byte[] ENCRYPT_KEY = { -81, 0, 105, 7, -32, 26, -49, 88 };public static final String CHARSET = "UTF-8";/*** BASE64解码* * @param key* @return* @throws Exception*/public static final byte[] decryptBASE64(String key) {try {return new BASE64Encoder().decode(key);} catch (Exception e) {throw new RuntimeException("解密错误,错误信息:", e);}}/*** BASE64编码* * @param key* @return* @throws Exception*/public static final String encryptBASE64(byte[] key) {try {return new BASE64Encoder().encode(key);} catch (Exception e) {throw new RuntimeException("加密错误,错误信息:", e);}}/*** 数据解密,算法(DES)* * @param cryptData 加密数据* @return 解密后的数据*/public static final String decryptDes(String cryptData) {return decryptDes(cryptData, ENCRYPT_KEY);}/*** 数据加密,算法(DES)* * @param data 要进行加密的数据* @return 加密后的数据*/public static final String encryptDes(String data) {return encryptDes(data, ENCRYPT_KEY);}/*** 基于MD5算法的单向加密* * @param strSrc 明文* @return 返回密文*/public static final String encryptMd5(String strSrc) {String outString = null;try {outString = encryptBASE64(MDCoder.encodeMD5(strSrc.getBytes(CHARSET)));} catch (Exception e) {throw new RuntimeException("加密错误,错误信息:", e);}return outString;}/*** SHA加密* * @param data* @return* @throws Exception*/public static final String encryptSHA(String data) {try {return encryptBASE64(SHACoder.encodeSHA256(data.getBytes(CHARSET)));} catch (Exception e) {throw new RuntimeException("加密错误,错误信息:", e);}}/*** HMAC加密* * @param data* @return* @throws Exception*/public static final String encryptHMAC(String data) {return encryptHMAC(data, ENCRYPT_KEY);}/*** 数据解密,算法(DES)* * @param cryptData 加密数据* @return 解密后的数据*/public static final String decryptDes(String cryptData, byte[] key) {String decryptedData = null;try {// 把字符串解码为字节数组,并解密decryptedData = new String(DESCoder.decrypt(decryptBASE64(cryptData), key));} catch (Exception e) {throw new RuntimeException("解密错误,错误信息:", e);}return decryptedData;}/*** 数据加密,算法(DES)* * @param data 要进行加密的数据* @return 加密后的数据*/public static final String encryptDes(String data, byte[] key) {String encryptedData = null;try {// 加密,并把字节数组编码成字符串encryptedData = encryptBASE64(DESCoder.encrypt(data.getBytes(), key));} catch (Exception e) {throw new RuntimeException("加密错误,错误信息:", e);}return encryptedData;}/*** HMAC加密* * @param data* @return* @throws Exception*/public static final String encryptHMAC(String data, byte[] key) {try {return encryptBASE64(HmacCoder.encodeHmacSHA512(data.getBytes(CHARSET), key));} catch (Exception e) {throw new RuntimeException("加密错误,错误信息:", e);}}/*** RSA签名* * @param data 原数据* @return*/public static final String signRSA(String data, String privateKey) {try {return encryptBASE64(RSACoder.sign(data.getBytes(CHARSET), decryptBASE64(privateKey)));} catch (Exception e) {throw new RuntimeException("签名错误,错误信息:", e);}}/*** RSA验签* * @param data 原数据* @return*/public static final boolean verifyRSA(String data, String publicKey, String sign) {try {return RSACoder.verify(data.getBytes(CHARSET), decryptBASE64(publicKey), decryptBASE64(sign));} catch (Exception e) {throw new RuntimeException("验签错误,错误信息:", e);}}/*** 数据加密,算法(RSA)* * @param data 数据* @return 加密后的数据*/public static final String encryptRSAPrivate(String data, String privateKey) {try {return encryptBASE64(RSACoder.encryptByPrivateKey(data.getBytes(CHARSET), decryptBASE64(privateKey)));} catch (Exception e) {throw new RuntimeException("解密错误,错误信息:", e);}}/*** 数据解密,算法(RSA)* * @param cryptData 加密数据* @return 解密后的数据*/public static final String decryptRSAPublic(String cryptData, String publicKey) {try {// 把字符串解码为字节数组,并解密return new String(RSACoder.decryptByPublicKey(decryptBASE64(cryptData), decryptBASE64(publicKey)));} catch (Exception e) {throw new RuntimeException("解密错误,错误信息:", e);}}public static void main(String[] args) throws Exception {System.out.println(encryptDes("SHJR"));System.out.println(decryptDes("INzvw/3Qc4q="));System.out.println(encryptMd5("SHJR"));System.out.println(encryptSHA("1"));Map<String, Object> key = RSACoder.initKey();String privateKey = encryptBASE64(RSACoder.getPrivateKey(key));String publicKey = encryptBASE64(RSACoder.getPublicKey(key));System.out.println(privateKey);System.out.println(publicKey);String sign = signRSA("132", privateKey);System.out.println(sign);String encrypt = encryptRSAPrivate("132", privateKey);System.out.println(encrypt);String org = decryptRSAPublic(encrypt, publicKey);System.out.println(org);System.out.println(verifyRSA(org, publicKey, sign));// System.out.println("-------列出加密服务提供者-----");// Provider[] pro = Security.getProviders();// for (Provider p : pro) {// System.out.println("Provider:" + p.getName() + " - version:" +// p.getVersion());// System.out.println(p.getInfo());// }// System.out.println("");// System.out.println("-------列出系统支持的消息摘要算法:");// for (String s : Security.getAlgorithms("MessageDigest")) {// System.out.println(s);// }// System.out.println("-------列出系统支持的生成公钥和私钥对的算法:");// for (String s : Security.getAlgorithms("KeyPairGenerator")) {// System.out.println(s);// }}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 查询时间转换_数据库查询时日期的转换

首先简单说明一下&#xff0c;laravel框架中查询并打印sql语句的办法&#xff0c;不管任何时候由于sql语句报错时&#xff0c;都可以先打印一下&#xff0c;分析一下是什么原因造成的错误①引入laravel框架DB类useIlluminate\Support\Facades\DB;②开启框架日志记录DB::connect…

浅谈Spring之@Nullable、@NonNull注解

NonNull 可以标注在方法、字段、参数之上&#xff0c;表示对应的值不可以为空 Nullable 注解可以标注在方法、字段、参数之上&#xff0c;表示对应的值可以为空

事务概念和事务四大特性和隔离级别

什么是事务 事务四大特性 原生的JDBC事务处理 事务的隔离级别

python中坐标怎么表示_如何在Python中以像素表示(有限)平面上的坐标

我假设你有十进制坐标&#xff0c;比如50.3869881&#xff0c;-4.6177269&#xff0c;南北优先。在因为你有一个相当小的地图&#xff0c;我们不需要担心地球的曲率&#xff0c;我们可以假设我们有一个线性地图&#xff0c;所以地图上点的(x&#xff0c;y)坐标将是x longitude…

2017.3.31 spring mvc教程(六)转发、重定向、ajax请求

学习的博客&#xff1a;http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本&#xff1a;4.2.0。博客的时间比较早&#xff0c;11年的&#xff0c;学习的是Spring3 MVC。不知道版本上有没有变化比较大的功能。 spring mvc教程&#xff08;六&#xff09;转发、重定向、a…

squid mysql认证_Squid 3.1.7通过mysql_auth方式认证

Squid 3.1.7通过mysql_auth方式认证(FreeBSD平台)一、下载相应软件及补丁#fetch http://people.arxnet.hu/airween/mysql_auth/mysql_auth-0.8.tar.gz#tar xvzf mysql_auth-0.8.tar.gz#cd mysql_auth-0.8#patch -p1 < ../additionalselect.patchpatching file src/confparse…

Spring事务传播属性和隔离级别

Spring事务传播属性和隔离级别 一、Spring事务传播属性&#xff08;Propagation&#xff09;&#xff1a; 1) REQUIRED&#xff08;默认属性&#xff09; 如果存在一个事务&#xff0c;则支持当前事务。如果没有事务则开启一个新的事务。 被设置成这个级别时&#xff0c;会为…

.net 解析Transfer-Encoding:chunked 秒掉网上无用方案

昨天在爬数据时&#xff0c;发现某个网站Response.Get过来的数据一直是为空。当时就很奇怪&#xff0c;认真看下了响应头。发现Transfer-Encoding:chunked这个玩意网上查了下资料一般情况HTTP的Header包含Content-Length域来指明报文体的长度。有时候服务生成HTTP回应是无法确定…

unity检测范围内敌人_Unity实现视野范围外死亡敌人的分数显示在屏幕内

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Test01 : MonoBehaviour&#xff5b;Transform cam;//相机物体Vector3 pos;// Start is called before the first frame updatevoid Start()&#xff5b;pos transform.position;c…

ClickHouse之简单性能测试

前面的文章ClickHouse之初步认识已经简单的介绍了ClickHouse&#xff0c;接下来进行简单的性能测试。测试数据来源于美国民用航班的数据&#xff0c;从1987年到2017年&#xff0c;有1.7亿条。 环境&#xff1a; centos 6.3&#xff0c;32G内存&#xff0c;24核 下载脚本&#x…

mysql主从从配置详解_MySQL主从配置详解

● 本打算买个云数据&#xff0c;为我的新项目做点安全保障。阿里云&#xff0c;腾讯云转了一圈&#xff0c;两个字太贵。不就数据有备份吗&#xff0c;既然这样那我不如自己来做备份。● 家里有2个树莓派直接把mysql备份到他们上就好了&#xff0c;网上有教程&#xff0c;这就…

泛型数组

定义泛型数组 在写程序时&#xff0c;大家可能会遇到类似String[] list new String[8];的需求&#xff0c;这里可以定义String数组&#xff0c;当然我们也可以定义泛型数组&#xff0c;泛型数组的定义方法为 T[]&#xff0c;与String[]是一致的&#xff0c;下面看看用法&#…

是前端类库还是前端框架?

一、BootstrapBootstrap是一系列常用CSS和jQuery plugin的集合&#xff0c;典型的UI库&#xff0c;带给你的是栅格系统&#xff0c;是预置的按钮、表单、列表、导航、响应式等样式&#xff0c;它在你独立开发的时候非常有用。因为能节约用来设计网页的时间&#xff0c;而且这套…

mysql php pdo例_PHP的PDO操作实例

try{$dbmsmysql; //数据库类型 ,对于开发者来说&#xff0c;使用不同的数据库&#xff0c;只要改这个&#xff0c;不用记住那么多的函数$host127.0.0.1; //数据库主机名$dbNamebooks; //使用的数据库$userroot; //数据库连接用户名$pass; …

Java泛型详解:<T>和Class<T>的使用,泛型类

单独的T 代表一个类型 &#xff0c;而 Class代表这个类型所对应的类&#xff0c; Class<&#xff1f;>表示类型不确定的类 E - Element (在集合中使用&#xff0c;因为集合中存放的是元素)T - Type&#xff08;Java 类&#xff09;K - Key&#xff08;键&#xff09;V - …

HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3183 题解&#xff1a; 方法一&#xff1a;贪心。 在草稿纸上试多几次可以知道&#xff0c;删除数字中从左到右最后一位递增&#xff08;可以等于&#xff09;的数字&#xff0c;可以得到最小值&#xff0c;在这…

python入门知识大全_python基础知识有哪些

Python基础知识&#xff1a;1、引用和对象&#xff1b;2、可变数据类型和不可变数据类型&#xff1b;3、引用传递和值传递&#xff1b;4、深拷贝和浅拷贝&#xff1b;5、基本数据类型&#xff1b;6、关键字、标识符和内置函数&#xff1b;7、算术、赋值运算符等等。Python基础知…

Django开发1

Django开发1 初识Django1.安装django2.创建项目2.1 在终端2.2 Pycharm 3. 创建app4.快速上手4.1 再写一个页面4.2 templates模板4.3 静态文件4.3.1 static目录4.3.2 引用静态文件 5.模板语法//Django开发案例&#xff1a;联通新闻中心6.请求和响应案例&#xff1a;用户登录7.数…

编程式事务和声明式事物

编程式事务 声明式事物

【每日算法】基数排序算法

1&#xff09;算法简介 基数排序是一种非比较型整数排序算法&#xff0c;其原理是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。由于整数也可以表达字符串&#xff08;比如名字或日期&#xff09;和特定格式的浮点数&#xff0c;所以基数排序也不是只能使…