SHA工具类:
package com.haha.demo.util;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class ShaUtil {
/**
* SHA-256加密方法,根据输入字符串,进行SHA-256方式加密,返回加密后的字符串
* @param src:要加密的原始字符串
* @return 输入字符串有效(不为null),则返回SHA-256加密后的字符串;否则返回null
*/
public static String sha256(String src){
if(src == null){
return null;
}
MessageDigest sha256;
try {
sha256 = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
byte[] inStrArray = src.getBytes(StandardCharsets.UTF_8);
byte[] sha256Bytes = sha256.digest(inStrArray);
StringBuilder hexValue = new StringBuilder();
int val;
for (byte sha256Byte : sha256Bytes) {
val = ((int) sha256Byte) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
/**
* HmacSHA256加密方法
* @param key:加密共享密匙
* @param src:要加密的字符串
* @return:成功返回加密后的字符串,否则返回null
*/
public static String hmacSha256(String key,String src){
if(key == null || src == null){
return null;
}
SecretKeySpec signKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac;
try {
mac = Mac.getInstance("HmacSHA256");
mac.init(signKey);
byte[] hmacSha256Bytes = mac.doFinal(src.getBytes(StandardCharsets.UTF_8));
StringBuilder hexValue = new StringBuilder();
int val;
for (byte hmacSha256Byte : hmacSha256Bytes) {
val = ((int) hmacSha256Byte) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[]args){
System.out.println(sha256("测试"));
System.out.println(hmacSha256("jiamimirao","测试"));
}
}
AES工具类:
package com.haha.demo.util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* AES加密,解密
* @author ljh
*
*/
public class AesUtil {
public static void main(String[] args){
try {
String encryptStr = encrypt("111", "A1B845F45BC6EF59" , "1234567890123456");
System.out.println(encryptStr);
String decrypt = decrypt(encryptStr, "A1B845F45BC6EF59" , "1234567890123456");
System.out.println(decrypt);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密
* @param content 待加密内容
* @param key 密钥,16位16进制
* @param iv 偏移量 ,16位16进制
* @return string
*/
public static String encrypt(String content, String key, String iv) {
try {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES"); //两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec,ivSpec);
byte[] byteResult = cipher.doFinal(content.getBytes());
return parseByte2HexStr(byteResult);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
* @param encryptStr 待加密内容
* @param key 密钥,16位16进制
* @param iv 偏移量 ,16位16进制
* @return string
*/
public static String decrypt(String encryptStr, String key , String iv) {
try {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES"); //两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec,ivSpec);
byte[] result = cipher.doFinal(parseHexStr2Byte(encryptStr));
return new String(result).trim();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将二进制转成16进制
* @param buf
* @return String
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuilder sb = new StringBuilder();
for (byte aBuf : buf) {
String hex = Integer.toHexString(aBuf & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**
* 将16进制转成2进制
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
}
DES工具类:
package com.haha.demo.util;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
public class DesUtil {
public static void main(String[]args){
System.out.println(encrypt("测试加密123", "adbcd123"));
String neirong = encrypt("测试加密123", "adbcd123");
System.out.println(decrypt(neirong,"adbcd123"));
}
/**
* 加密
* @param data 待加密的内容
* @param sKey 密钥
* @return
*/
public static String encrypt(String data, String sKey) {
try {
byte[] key = sKey.getBytes();
// 初始化向量
IvParameterSpec iv = new IvParameterSpec(key);
DESKeySpec desKey = new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成securekey
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(desKey);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, iv);
// 现在,获取数据并加密
// 正式执行加密操作
byte[] byteResult = cipher.doFinal(data.getBytes());
return parseByte2HexStr(byteResult);
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
* @param src 待加密的内容
* @param sKey 秘钥
* @return
*/
public static String decrypt(String src, String sKey) {
try {
byte[] key = sKey.getBytes();
// 初始化向量
IvParameterSpec iv = new IvParameterSpec(key);
// 创建一个DESKeySpec对象
DESKeySpec desKey = new DESKeySpec(key);
// 创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
// 将DESKeySpec对象转换成SecretKey对象
SecretKey securekey = keyFactory.generateSecret(desKey);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, iv);
// 真正开始解密操作
byte[] result = cipher.doFinal(parseHexStr2Byte(src));
return new String(result).trim();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将二进制转换成16进制
*
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuilder sb = new StringBuilder();
for (byte aBuf : buf) {
String hex = Integer.toHexString(aBuf & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**
* 将16进制转换为二进制
*
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1) return null;
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
}
MD5工具类:
package com.haha.demo.util;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Util {
/**
* MD5加密方法,根据输入字符串,进行md5加密后,输出加密后的字符串
* @param src:要加密的原始字符串
* @return:输入字符串有效(不为null),则返回MD5加密后的字符串;否则返回null
*/
public static String md5(String src){
if(src == null){
return null;
}
MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
byte[] inStrArray = src.getBytes(StandardCharsets.UTF_8);
byte[] md5Bytes = md5.digest(inStrArray);
StringBuilder hexValue = new StringBuilder();
int val;
for (byte md5Byte : md5Bytes) {
val = ((int) md5Byte) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
public static void main(String[]args){
System.out.println(md5("测试123"));
System.out.println(md5("abc123"));
}
}
CRC工具类:
package com.haha.demo.util;
import java.util.zip.CRC32;
public class CRC32Util {
public static void main(String[]args){
System.out.println(getCrc32("测试123"));
System.out.println(getCrc32("ab123"));
}
public static String getCrc32(String content){
CRC32 crc32 = new CRC32();
crc32.update(content.getBytes());
Long value = crc32.getValue();
return Long.toHexString(value);
}
}