Java加密工具类EncryptUtils
Java 提供了一些常见的加密算法,如 MD5、SHA、AES、DES,现将这些实现方法放进加密工具类 EncryptionUtils
- 使用了
String.format()
来确保每个字节都能够正确的被转化为成十六进制字符串,而且不会因为缺少前导零而导致结果不正确 - 配合
StringBuilder
提高字符串处理效率 - 使用标准字符集 UTF-8 替换默认字符集,保证不同系统的兼容性和一致性。
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Base64;public class EncryptUtils {/*** 将字节数组转化为 16 进制字符串* @param bytes 字节数组* @return 16 进制字符串*/private static String byteArrayToHexString(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte b : bytes) {sb.append(String.format("%02x", b & 0xff));}return sb.toString();}/*** 将 16 进制字符串转化为字节数组* @param hexString 16 进制字符串* @return 字节数组*/private static byte[] hexStringToByteArray(String hexString) {int len = hexString.length();byte[] bytes = new byte[len / 2];for (int i = 0; i < len; i += 2) {bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)+ Character.digit(hexString.charAt(i+1), 16));}return bytes;}/*** 对字符串进行 Base64 编码* @param str 需要进行编码的字符串* @return Base64 编码后的字符串*/public static String encodeWithBase64(String str) {byte[] bytes = str.getBytes(StandardCharsets.UTF_8);byte[] encoded = Base64.getEncoder().encode(bytes);return new String(encoded, StandardCharsets.UTF_8);}/*** 对 Base64 编码的字符串进行解码* @param encodedStr 需要进行解码的 Base64 编码后的字符串* @return 解码后的字符串*/public static String decodeWithBase64(String encodedStr) {byte[] encoded = encodedStr.getBytes(StandardCharsets.UTF_8);byte[] bytes = Base64.getDecoder().decode(encoded);return new String(bytes, StandardCharsets.UTF_8);}/*** 使用 MD5 算法加密字符串* @param str 待加密的字符串* @return 加密后的字符串*/public static String encryptWithMD5(String str) {try {MessageDigest md = MessageDigest.getInstance("MD5");byte[] hash = md.digest(str.getBytes());return byteArrayToHexString(hash);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/*** 使用 SHA-1 算法加密字符串* @param str 待加密的字符串* @return 加密后的字符串*/public static String encryptWithSHA1(String str) {try {MessageDigest md = MessageDigest.getInstance("SHA-1");byte[] hash = md.digest(str.getBytes(StandardCharsets.ISO_8859_1));return byteArrayToHexString(hash);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/*** 使用 SHA-256 算法加密字符串* @param str 待加密的字符串* @return 加密后的字符串*/public static String encryptWithSHA256(String str) {try {MessageDigest md = MessageDigest.getInstance("SHA-256");byte[] hash = md.digest(str.getBytes(StandardCharsets.UTF_8));return byteArrayToHexString(hash);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/*** 使用 SHA-512 算法加密字符串* @param str 待加密的字符串* @return 加密后的字符串*/public static String encryptWithSHA512(String str) {try {MessageDigest md = MessageDigest.getInstance("SHA-512");byte[] hash = md.digest(str.getBytes(StandardCharsets.UTF_8));return byteArrayToHexString(hash);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/*** 使用 SHA3-256 算法加密字符串* @param str 待加密的字符串* @return 加密后的字符串*/public static String encryptWithSHA3_256(String str) {try {MessageDigest md = MessageDigest.getInstance("SHA3-256");byte[] hash = md.digest(str.getBytes(StandardCharsets.UTF_8));return byteArrayToHexString(hash);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/*** 使用 SHA3-512 算法加密字符串* @param str 待加密的字符串* @return 加密后的字符串*/public static String encryptWithSHA3_512(String str) {try {MessageDigest md = MessageDigest.getInstance("SHA3-512");byte[] hash = md.digest(str.getBytes(StandardCharsets.UTF_8));return byteArrayToHexString(hash);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}/*** 使用 AES 算法加密字符串* @param key 密钥* @param str 需要加密的数据* @return 加密后的字符串*/public static String encryptWithAES(String str, String key) {try {byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] encrypted = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encrypted);} catch (Exception e) {e.printStackTrace();}return null;}/*** 使用 AES 算法解密字符串* @param key 密钥* @param str 需要加密的数据* @return 解密后的字符串*/public static String decryptWithAES(String str, String key) {try {byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(str));return new String(decrypted, StandardCharsets.UTF_8);} catch (Exception e) {e.printStackTrace();}return null;}/*** 使用 DES 算法加密字符串* @param key 密钥* @param str 需要加密的字符串* @return 加密后的字符串*/public static String encryptWithDES(String str, String key) {try {byte[] iv = new byte[8];new SecureRandom().nextBytes(iv);DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey secretKey = keyFactory.generateSecret(desKeySpec);Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");IvParameterSpec ivSpec = new IvParameterSpec(iv);cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);byte[] encrypted = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));byte[] combined = Arrays.copyOf(iv, iv.length + encrypted.length);System.arraycopy(encrypted, 0, combined, iv.length, encrypted.length);return Base64.getEncoder().encodeToString(combined);} catch (Exception e) {e.printStackTrace();return null;}}/*** 使用 DES 算法解密字符串* @param key 密钥* @param str 需要加密的字符串* @return 加密后的字符串*/public static String decryptWithDES(String str, String key) {try {Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey secretKey = keyFactory.generateSecret(desKeySpec);cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decoded = Base64.getDecoder().decode(str);byte[] decrypted = cipher.doFinal(decoded);return new String(decrypted, StandardCharsets.UTF_8);} catch (Exception e) {e.printStackTrace();return null;}}/*** 获取字符串的加密值* @param plainText 明文字符串* @param encryptType 加密算法* @return 加密值*/private static String encrypt(String plainText, String encryptType) {try {MessageDigest messageDigest = MessageDigest.getInstance(encryptType);messageDigest.update(plainText.getBytes(StandardCharsets.UTF_8));byte[] bytes = messageDigest.digest();return byteArrayToHexString(bytes);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}
}
Java加密工具类EncryptUtils相关推荐
- JAVA加密工具类实例
工具类还是老套路,要让用户可扩展,同时提供一个基础工具即可,本文分享BeginCode的用户密码加密工具类的使用, 如果不为了扩展性,可以写成工具类即可,提供两个静态方法如下 一个方法是直接MD5加密 ...
- java 加密工具类
/*** 加密工具类* @version 1.0* @date 2019-09-02 0:41**/ public class EncryptUtils {/*** 盐值生成的长度,需要的长度除以二* ...
- 加密工具类 - CryptoUtils.java
加密工具类,包含MD5,BASE64,SHA,CRC32的加密与解密方法. 源码如下:(点击下载 - CryptoUtils.java.commons-io-2.4.jar.commons-code ...
- md5加密工具类_贼好用的 Java 工具类库! GitHub 星标 10k+,你在用吗?
来源:ryanc.cc/archives/hutool-java-tools-lib 简介 Hutool是Hu + tool的自造词,前者致敬我的"前任公司",后者为工具之意,谐音 ...
- java在线支付---04_编写易宝支付的客户端加密工具类
2013/5/30 04_编写易宝支付的客户端加密工具类 创梦综合技术qq交流群:CreDream:251572072 ---------------------------------------- ...
- java 随机md5_java常用工具类 Random随机数、MD5加密工具类
本文实例为大家分享了java常用工具类的具体代码,供大家参考,具体内容如下 random随机数工具类 package com.jarvis.base.util; import java.util.ra ...
- Java教程:微信排序并加密工具类
Java教程:微信排序并加密工具类 源码: import cn.bsit.commons.md5.MD5Utils;import java.util.Arrays; import java.util. ...
- Java实现几种加密工具类
在我们的程序员之路上,肯定少不了加密的协助,比如最常见的MD5与sha这两种加密,这次我给大家带来的是不用任何操作,直接粘上就能用的加密工具类(懒惰程序员的福音),好了话不多说,直接如下: impor ...
- 一、java项目常用工具类之加密工具类
项目环境: jdk1.8+spring4.3.12 一.问题描述及试用场景: 在项目规范中,有时需要对一些数据进行加密解密,常见的就是前后端加密参数在网络上传输.一方面,数据在网络上是以加密的方式传输 ...
最新文章
- Linux那些事儿之我是Sysfs(1)sysfs初探
- vim编辑文章后不能修改
- axure 下拉多选 元件_Axure教程:下拉多选列表集合(多选下拉列表+单选下拉列表+分级下拉列表)...
- LTE: 系统内移动性知识点总结
- 常见的Java WEB服务器
- 逻辑运算符和||与(和|)的区别
- 国内“重量级”单体数据中心开始运营 火了这个县
- 化工设备与反应器 第三章 直梁的弯曲
- boost::hana::greater_equal用法的测试程序
- jw摄像_Java命令行界面(第17部分):jw-options
- 搞生物的速看!有了它,30分钟可以把一天的工作都给干完!
- 【实习生笔试面试题】2013年搜狐SOHU实习生技术笔试题
- idea mac 查找文件快捷键_idea for mac 最全快捷键整理
- 不越狱 继续逆向 微信运动
- FL Studio 20.8中文进阶高级完整版 安装下载教程
- ICCV2021 多目标跟踪(MOT)汇总
- 文本加密(PTA厦大慕课)
- 2021充电必备:推荐一些免费的电子书网站及TXT阅读器
- Excel数据分析(八)图表
- sublime text 3 插件 OmniMarkupPreviewer 报404解决办法