java util - MD5/AES/RSA快速调用工具
测试代码
package cn.java.security; import java.security.Key;
import java.util.Base64;
import org.junit.Assert;
import cn.java.codec.hex.HexUtil;
import cn.java.security.SecurityUtil.RsaUtil.RsaKeyPair; public class Test { public static void main(String[] args) throws Exception{
System.out.println("-----------<<< testDigest >>>------------------");
testDigest();
System.out.println(); System.out.println("-----------<<< testAes >>>------------------");
testAes();
System.out.println(); System.out.println("-----------<<< testRsa >>>------------------");
testRsa();
System.out.println();
} /**
* 对称加密算法
* @throws Exception
*/
public static void testAes() throws Exception {
String content = "testAes";
String secretKeyStr = SecurityUtil.AesUtil.generaterKey();
System.out.println("-----------secretKeyStr------------------");
System.out.println(secretKeyStr);
String encryptStr = SecurityUtil.AesUtil.encrypt(content, secretKeyStr);
String decryptStr = SecurityUtil.AesUtil.decrypt(encryptStr, secretKeyStr);
System.out.println("-----------encryptStr------------------");
System.out.println(encryptStr);
System.out.println("-----------decryptStr------------------");
System.out.println(decryptStr);
} /**
* 非对称加密算法
* @throws Exception
*/
public static void testRsa() throws Exception { String content = "testRsa";
// 生成秘钥对
RsaKeyPair mRsaKeyPair = SecurityUtil.RsaUtil.generaterKeyPair();
String privateKeyStr = mRsaKeyPair.getPrivateKey();
String publicKeyStr = mRsaKeyPair.getPublicKey();
System.out.println("-----------privateKeyStr------------------");
System.out.println(privateKeyStr);
System.out.println("-----------publicKeyStr------------------");
System.out.println(publicKeyStr); // test sign
{
String signStr = SecurityUtil.RsaUtil.sign(content, privateKeyStr,true);
boolean isValid = SecurityUtil.RsaUtil.verify(content,signStr, publicKeyStr,true);
System.out.println("-----------signStr------------------");
System.out.println(signStr);
System.out.println("-----------isValid------------------");
System.out.println(isValid);
} // test codec
{
Key privateKey = SecurityUtil.RsaUtil.getPrivateKey(privateKeyStr);
Key publicKey = SecurityUtil.RsaUtil.getPublicKey(publicKeyStr); // 私钥加密、公钥解密
String encryptStr = SecurityUtil.RsaUtil.encrypt(content, privateKey);
String decryptStr = SecurityUtil.RsaUtil.decrypt(encryptStr, publicKey);
// Assert.assertEquals(content, decryptStr);
System.out.println("-----------encryptStr------------------");
System.out.println(encryptStr);
System.out.println("-----------decryptStr------------------");
System.out.println(decryptStr); // 公钥加密、私钥解密
encryptStr = SecurityUtil.RsaUtil.encrypt(content, privateKey);
decryptStr = SecurityUtil.RsaUtil.decrypt(encryptStr, publicKey);
Assert.assertEquals(content, decryptStr);
} } /**
* 签名
*/
public static void testDigest() throws Exception {
byte[] bytes = SecurityUtil.MessageDigestUtil.digest("test", true);
String hexEncode = HexUtil.encode(bytes);
System.out.println(hexEncode); byte[] hexDecode = HexUtil.decode(hexEncode);
System.out.println(Base64.getEncoder().encodeToString(bytes));
System.out.println(Base64.getEncoder().encodeToString(hexDecode));
} }
数据内容
-----------<<< testDigest >>>------------------
098f6bcd4621d373cade4e832627b4f6
CY9rzUYh03PK3k6DJie09g==
CY9rzUYh03PK3k6DJie09g== -----------<<< testAes >>>------------------
-----------secretKeyStr------------------
BREMlyKxuMP2Qc7wIVa9Hg==
16
16
-----------encryptStr------------------
W+47ylkmqZ3G2Wq95esUEg==
-----------decryptStr------------------
testAes -----------<<< testRsa >>>------------------
-----------privateKeyStr------------------
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCQsWH5fsMj03Ja2W5pxvCz5JBrOUF43yZCenUuBB9gMcJH9oySOeQVWWiAQJ+sVqI4QqMLrYsZJuNnuHFWr+uIFyXV7doQDFysvPmbMeQ1UPR9Bv+60QC47YRpVzAR3x0bGRbB3cCJ2U+t55xDV0CuljqR7X4CyfVSDvqaRV08uRn+b/vIvC0e623Uidez1IwGbobWYXBL6WRS0ooOm8AcSy84+c+mahuOUQFjJak18fBwJYnPTHWQnpxtnPYQ028LY05Njnux6DY2tEqeavvFuGQ4jXEhLEqTQL0dT2/auM39wErLkgfwX6OPPgCM/AcUKaM/pdzbZG1In2sVjFUlAgMBAAECggEAP6u+6FJOvqoiTTYW7zca3p56qqRUWkMgC+rlO62WvPbIfnBQ5VvSMU7ZvG4zlVu+ILG6G75vUk8ZjJ/OSA47v/Qnsx7qcVtvQJgb4p4uxQNtwsLcr7Ge9sGWHeC/B2492ZnNuNvDCSX2eRlNWxi/HtR+y45NgB6s9EIhJtfVMo27/a4qEKoyxB9kUOQ+EWXEEGDt8ERYnJfuG6doZ/NI+T8caziKqnmR1pj30B7ASSsFUKoH1YbV71ftBPEvUsyqIOZgLokWfNq3QSWzFoskslJAOxATMcGD+HVt8QQfX92nfd4odpxZNqeS/Qc0MRj+zvltN0LsOBATYq6sRw0StQKBgQDJ3u3p1htpL0DZTgas39hp1qiA3BA9xmD4QZfHQydntDMzLSHDssM/yX1TJuaO6TLFVG9KNqf5UtgKt3QTImm6vU3rsITShAiYKcdbyyEIxpITC89JNqKFop8w77xlYxZc02iS4I4he1rcZFx+14dIJwTCBXUyrkzHxWehmPbDZwKBgQC3fZMrUcJQ7LV8Z4t+gS7ViJh0oE/kvjc8qN5VnW4/YwrAiqsIeM1/J65wQZpl0OcgtRVXhfo2yX+xa8CCh1W22QCGGpuGfSjuM3FSB/QJaBnyW7CZQey0VOICAXAiMf7I8bGO6vaxaK6ECQgcN4bxuFVfV/9U7D6F8tXLsMk3kwKBgFyujlqio3kaadKbITNznj+Rf1GSN561GsZADzg8G7ZgJHWlje/0ffImRvTLUmVgqZ+xkVroVxyALZJWAePbE+HZkhHYvFKOrgd2fwIk86i8ykoWTPgXLmzeaeok10FRSe4aXdO5Z2f145R2O4U83O6Cg4u0x8caAURi3J5zxS+XAoGBAKxbx/dkKGyNvXirZwwg2tZ4JgU/ZWzQBOD1G0w+woXGSh5M45Xkq9uqcaA+74J+de1yTCbX0g7OviTxu3ahG7HTKzvNGJR/UwhVyDevAtwnLmBLIpsDow5NwbLymNt2LQeiiRBfw/UoCO478aNXwWmjpoYWCeFCvQRj89IPMSQDAoGBAIYlxX5FcfColAT3Ams4cjXqVMiwH2O+Ka7bkeQMfWuLTpGAcgM/f6vMoQ1NHUgu+M70pyyrV48pBHxIqAP0PYn6piMMfk7S6yORDF9riFh8D30up3O0Bfe8PbTyModCdhaGNWvhSqMs/ijDVclAXWeuKtA6A8GFuWvxgKdONey9
-----------publicKeyStr------------------
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkLFh+X7DI9NyWtluacbws+SQazlBeN8mQnp1LgQfYDHCR/aMkjnkFVlogECfrFaiOEKjC62LGSbjZ7hxVq/riBcl1e3aEAxcrLz5mzHkNVD0fQb/utEAuO2EaVcwEd8dGxkWwd3AidlPreecQ1dArpY6ke1+Asn1Ug76mkVdPLkZ/m/7yLwtHutt1InXs9SMBm6G1mFwS+lkUtKKDpvAHEsvOPnPpmobjlEBYyWpNfHwcCWJz0x1kJ6cbZz2ENNvC2NOTY57seg2NrRKnmr7xbhkOI1xISxKk0C9HU9v2rjN/cBKy5IH8F+jjz4AjPwHFCmjP6Xc22RtSJ9rFYxVJQIDAQAB
-----------signStr------------------
ZZuYMdl58w2TCBaUMfU0p+XUL6Irix9/nD0gPm83P/xqlY18GROztZmat5XLKA5Wu373/2l2WhIKdp7DYoQm0Cnmr/0PDGz9PHw2Hhd9I52OVkcDqSPqgmo0U9uE02Urlt3C2moVS08b3VhLHOOzSq8lcsicqis17p0KY33k2he2XMbHEJEbxRMkPCDubDWqwnS/fKiXbNn3u+jni7zdX/Phaq41V2lMMMjdIP8Pm7OxlxdNP3aoTAu6eHaCvakganQE2cz6Y1HwfgXgA8EzaTCcE+weGBbfy9umcMfK0/Pnsqp+jTiz3c8O0p0C8QwogGwIOLBzbeu4d9svC8JA9Q==
-----------isValid------------------
true
-----------encryptStr------------------
dJGhdeCaK/gw52NkD+z1BPoooKYgHqMWUn+tvyPndrq1f5oqaqc8mn/ZclWCLg/hN4PE9zi7gCD9xgp/KEPWOc6XNzOXA/92LVBERpGGtYLQmZnOS8ZrrD4xxxMmra5qD2j03T9Cu4xrICCVZ/Qcp7l05/tZt6tFXJqSDG5uSN9I/en+Mbza9aGwBiTWm6rpv+E5F3sMVk9XDMMgVTMVu6DeT4jZ7HjQ+GATlYFHReVFWmyTv8ijKdnhgMhVvOrGToRAu/ExbNuF99l6FB5I5ZQQMU0wyQDlpXm4GYoRIMmT5wweWJy2f0yO4BnkTje8oNMz7pXnuhNdEulZ5S86sA==
-----------decryptStr------------------
testRsa
工具类
package cn.java.security; import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64; import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; public class SecurityUtil { /**
* 消息摘要
* @author zhouzhian
*
*/
public static class MessageDigestUtil { public static byte[] digest(String content, boolean isMd5) throws Exception {
MessageDigest messageDigest = null;
String algorithm = isMd5 ? "MD5" : "SHA";
messageDigest = MessageDigest.getInstance(algorithm);
return messageDigest.digest(content.getBytes());
} public static byte[] digest1(String content, boolean isMd5) throws Exception {
MessageDigest messageDigest = null;
String algorithm = isMd5 ? "MD5" : "SHA";
messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.update(content.getBytes());
return messageDigest.digest();
}
} /**
* 对称加密算法
* @author zhouzhian
*
*/
public static class AesUtil {
private static final String ALGORITHM = "AES";
private static final String DEFAULT_CHARSET = "UTF-8"; /**
* 生成秘钥
* @return
* @throws NoSuchAlgorithmException
*/
public static String generaterKey() throws NoSuchAlgorithmException {
KeyGenerator keygen = KeyGenerator.getInstance(ALGORITHM);
keygen.init(128, new SecureRandom()); // 16 字节 == 128 bit
// keygen.init(128, new SecureRandom(seedStr.getBytes())); // 随机因子一样,生成出来的秘钥会一样
SecretKey secretKey = keygen.generateKey();
return Base64.getEncoder().encodeToString(secretKey.getEncoded());
} /**
*/
public static SecretKeySpec getSecretKeySpec(String secretKeyStr){
byte[] secretKey = Base64.getDecoder().decode(secretKeyStr);
System.out.println(secretKey.length);
return new SecretKeySpec(secretKey, ALGORITHM);
} /**
* 加密
*/
public static String encrypt(String content,String secretKey) throws Exception{
Key key = getSecretKeySpec(secretKey);
Cipher cipher = Cipher.getInstance(ALGORITHM);// 创建密码器
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content.getBytes(DEFAULT_CHARSET));
return Base64.getEncoder().encodeToString(result);
} /**
* 解密
*/
public static String decrypt(String content, String secretKey) throws Exception{
Key key = getSecretKeySpec(secretKey);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));
return new String(result);
}
} /**
* 非对称加密算法
* @author zhouzhian
*
*/
public static class RsaUtil { public static class RsaKeyPair {
private String publicKey ="";
private String privateKey =""; public RsaKeyPair(String publicKey, String privateKey) {
super();
this.publicKey = publicKey;
this.privateKey = privateKey;
} public String getPublicKey() {
return publicKey;
}
public String getPrivateKey() {
return privateKey;
}
} private static final String ALGORITHM = "RSA";
private static final String ALGORITHMS_SHA1WithRSA = "SHA1WithRSA";
private static final String ALGORITHMS_SHA256WithRSA = "SHA256WithRSA";
private static final String DEFAULT_CHARSET = "UTF-8";
private static String getAlgorithms(boolean isRsa2) {
return isRsa2 ? ALGORITHMS_SHA256WithRSA : ALGORITHMS_SHA1WithRSA;
} /**
* 生成秘钥对
* @return
* @throws NoSuchAlgorithmException
*/
public static RsaKeyPair generaterKeyPair() throws NoSuchAlgorithmException{
KeyPairGenerator keygen = KeyPairGenerator.getInstance(ALGORITHM);
SecureRandom random = new SecureRandom();
// SecureRandom random = new SecureRandom(seedStr.getBytes()); // 随机因子一样,生成出来的秘钥会一样
// 512位已被破解,用1024位,最好用2048位
keygen.initialize(2048, random);
// 生成密钥对
KeyPair keyPair = keygen.generateKeyPair();
RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();
RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();
String privateKeyStr = Base64.getEncoder().encodeToString(privateKey.getEncoded());
String publicKeyStr = Base64.getEncoder().encodeToString(publicKey.getEncoded());
return new RsaKeyPair(publicKeyStr,privateKeyStr);
} /**
* 获取公钥
* @param publicKey
* @return
* @throws Exception
*/
public static RSAPublicKey getPublicKey(String publicKey) throws Exception{
byte[] keyBytes = Base64.getDecoder().decode(publicKey);
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
return (RSAPublicKey) keyFactory.generatePublic(spec);
} /**
* 获取私钥
* @param privateKey
* @return
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
* @throws Exception
*/
public static RSAPrivateKey getPrivateKey(String privateKey) throws Exception{
byte[] keyBytes = Base64.getDecoder().decode(privateKey);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
return (RSAPrivateKey) keyFactory.generatePrivate(spec);
} /**
* 要私钥签名
* @throws InvalidKeySpecException
* @throws Exception
*/
public static String sign(String content, String privateKey, boolean isRsa2) throws Exception {
PrivateKey priKey = getPrivateKey(privateKey);
java.security.Signature signature = java.security.Signature.getInstance(getAlgorithms(isRsa2));
signature.initSign(priKey);
signature.update(content.getBytes(DEFAULT_CHARSET));
byte[] signed = signature.sign();
return Base64.getEncoder().encodeToString(signed);
} /**
* 要公钥签名
*/
public static boolean verify(String content,String sign,String publicKey,boolean isRsa2) throws Exception {
PublicKey pubKey = getPublicKey(publicKey);
java.security.Signature signature = java.security.Signature.getInstance(getAlgorithms(isRsa2));
signature.initVerify(pubKey);
signature.update(content.getBytes(DEFAULT_CHARSET));
return signature.verify(Base64.getDecoder().decode(sign));
} /**
* 加密
* @param input
* @param pubOrPrikey
* @return
*/
public static String encrypt(String content, Key pubOrPrikey) throws Exception{
Cipher cipher = null;
cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, pubOrPrikey);
byte[] result = cipher.doFinal(content.getBytes(DEFAULT_CHARSET));
return Base64.getEncoder().encodeToString(result);
} /**
* 解密
* @param input
* @param pubOrPrikey
* @return
*/
public static String decrypt(String content, Key pubOrPrikey) throws Exception {
Cipher cipher = null;
cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, pubOrPrikey);
byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));
return new String(result);
}
} }
java util - MD5/AES/RSA快速调用工具的更多相关文章
- Java.util.Math类--数学相关的工具类
Math类--数学相关的工具类 java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作. public static double abs(double ...
- RSA加解密工具类RSAUtils.java,实现公钥加密私钥解密和私钥解密公钥解密
package com.geostar.gfstack.cas.util; import org.apache.commons.codec.binary.Base64; import javax.cr ...
- 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密
前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...
- [转载] java多线程学习-java.util.concurrent详解(一) Latch/Barrier
转载自http://janeky.iteye.com/blog/769965 Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可 ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历
一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看J ...
- java.util.Arrays,java.lang.Math,java.lang.System 类的常用方法汇总
java.util.Arrays类是数组的工具类,一般数组常用的方法包括 二分查找:public static int binarySearch(array[],int key),返回key的下标i ...
- java 加密工具类(MD5、RSA、AES等加密方式)
1.加密工具类encryption MD5加密 import org.apache.commons.codec.digest.DigestUtils; /** * MD5加密组件 * * @autho ...
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
版权声明:本文为博主原创文章,未经博主允许不得转载. [前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 [最简单的加密] 1.简单的概念 明文:加密前的 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
随机推荐
- Unity SceneManager 对场景的操作
用 SceneManager 之前要引用using UnityEngine.SceneManagement; 命名空间. 1.拿到当前场景的名字:SceneManager.GetActiveScene ...
- 如何在mssql中获取最新自增ID的值
@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy.如果在给没有 IDENTITY 列的其他表插入记录,系统 ...
- 提高PHP编程效率的20个要点
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...
- 开源的SSH框架优缺点分析
开源是3个框架共有的优点 Struts2框架(MVC框架)的优点如下: 1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现: 2) 丰富的标签库,大大提高了开发的效率: 3) Str ...
- JAVA反射练习
JAVA反射练习 题目 实现一个方法 public static Object execute(String className, String methodName, Object args[]) ...
- Java并发(五):并发,迭代器和容器
在随后的博文中我会继续分析并发包源码,在这里,得分别谈谈容器类和迭代器及其源码,虽然很突兀,但我认为这对于学习Java并发很重要; ConcurrentModificationException: J ...
- Android数据库(1)、SQLite数据库介绍
一.关系性数据库 关系型数据库主要有以下三个特征,尤为明显,如果没有这个三个特征约束,当多个客户端使用数据的时候就会出现各种各样的错误,所以关系型数据库定义这些约束,让客户端程序只要遵守这个规则便 ...
- BaiduPCS-Go 使用CMD命令行全速下载百度云
BaiduPCS-Go 使用CMD命令行全速下载百度云 链接: https://laod.cn/black-technology/baidupcs-go-baiduyun.html 下面为自己测试过程 ...
- webpack4流程笔记
初始化 mkdir webpack-demo ->新建文件夹 cd webpack-demo ->进入文件夹 第一步 npm init -y -> 初始化项目(生成pack ...
- agc007B - Construct Sequences(构造)
题意 题目链接 给出一个$1-N$的排列$P$,构造两个数组$a, b$满足 Sol 发现我的水平也就是能做一做0-699的题.... 直接构造两个等差数列$a, b$,公差为$20000$ 然后从小 ...