com.gitee.feizns.dynamic.decrypt.Encrypts Maven / Gradle / Ivy
package com.gitee.feizns.dynamic.decrypt;
import com.gitee.feizns.dynamic.Strings;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Formatter;
/**
* 加解密工具类
*
* 常用加密解密算法的工具类
*
* @author feizns
*/
public class Encrypts {
/**
* 16进制字符
*/
private static final char[] hexDigits = "0123456789ABCDEF".toCharArray();
/**
* SHA1加密
* @param string {@link String}
* @return 返回加密后的字符
*/
public static String sha1(String string) {
return update(string, "SHA1");
}
/**
* SHA-256加密
* @param string {@link String}
* @return 加密后的字符
*/
public static String sha256(String string) {
return update(string, "SHA-256");
}
/**
* SHA-512加密
* @param string {@link String}
* @return 加密后的字符
*/
public static String sha512(String string) {
return update(string, "SHA-512");
}
/**
* md5加密
* @param string {@link String}
* @return 加密字符
*/
public static String md5(String string) {
return update(string, "MD5");
}
/**
* 对普通字符进行base64编码
* @param str {@link String}
* @return 编码后的字符
*/
public static String base64Encode(String string) {
return new String(base64Encode(Strings.bytes(string)));
}
/**
* 对普通字符进行base64编码
* @param bytes 字节数据
* @return 编码后的字符
*/
public static byte[] base64Encode(byte[] bytes) {
return Base64.getEncoder().encode(bytes);
}
/**
* 对base64字符str进行解码
* @param str {@link String}
* @return 解码后的字符
*/
public static String base64Decode(String string) {
return new String(base64Decode(Strings.bytes(string)));
}
/**
* 对base64字符str进行解码
* @param bytes {@link Byte}
* @return 解码后的字符
*/
public static byte[] base64Decode(byte[] bytes) {
return Base64.getDecoder().decode(bytes);
}
/**
* 指定对于字符的加密算法并做加密转换
* @see #update(byte[], String)
* @param string {@link String}
* @param algorithm 算法
* @return 加密后的字符
*/
private static String update(String string, String algorithm) {
return update(Strings.bytes(string), algorithm);
}
/**
* 指定对于字符的加密算法并做加密转换
* @param bytes {@link Byte}
* @param algorithm 算法
* @return 加密后的字符
*/
private static String update(byte[] bytes, String algorithm) {
try {
MessageDigest mdTemp = MessageDigest.getInstance(algorithm);
mdTemp.update(bytes);
byte[] md = mdTemp.digest();
int j = md.length;
char[] buf = new char[j * 2];
int k = 0;
for (byte byte0 : md) {
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}
return new String(buf);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
/**
* Java生成MD5的坑
* @param bytes 字节
* @return 16进制字符
*/
private static String toHexString(byte[] bytes) {
try ( Formatter formatter = new Formatter() ) {
for (byte b : bytes) {
formatter.format("%02x", b);
}
return formatter.toString();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy