MD5密码加密
This commit is contained in:
parent
e72f0ff6bd
commit
cdc90eec3e
|
|
@ -19,216 +19,14 @@ import java.util.Locale;
|
||||||
*/
|
*/
|
||||||
public class PasswdFactory {
|
public class PasswdFactory {
|
||||||
|
|
||||||
private PasswdFactory() {
|
|
||||||
throw new AssertionError("No " + getClass().getName() + " instances for you!");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加密密码
|
* 加密
|
||||||
*
|
* @version v1.0
|
||||||
* @param id 用户主键
|
* @author dong
|
||||||
* @param username 用户账户
|
* @date 2022/9/23 10:07
|
||||||
* @param passwd 用户密码
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
public static String encryptPasswd(String id, String username, String passwd) {
|
public static String encryptPasswd(String id, String username, String passwd)throws Exception {
|
||||||
// System.out.println("id -> "+id);
|
return MD5.md5(id+passwd);
|
||||||
// System.out.println("username -> "+username);
|
|
||||||
// System.out.println("passwd -> "+passwd);
|
|
||||||
String str = id + "@" + BASE64.encode(username) + "@" + passwd;
|
|
||||||
return AES.encryptToHex(str, key(id), iv());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解密密码
|
|
||||||
*
|
|
||||||
* @param id 用户主键
|
|
||||||
* @param passwd 加密米密码
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static String decryptPasswd(String id, String passwd) {
|
|
||||||
String encryptText = AES.decryptByHex(passwd,
|
|
||||||
key(id), iv());
|
|
||||||
if (encryptText != null) {
|
|
||||||
return encryptText.split("@")[2];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String iv() {
|
|
||||||
return AES.padRight(AES.padLeft("Az", 9, '*'), 16, '0');
|
|
||||||
}
|
|
||||||
|
|
||||||
static String key(String id) {
|
|
||||||
return MD5.md5(id, 32);
|
|
||||||
}
|
|
||||||
|
|
||||||
static class AES {
|
|
||||||
|
|
||||||
static byte[] encrypt(String src, String key, String iv) {
|
|
||||||
try {
|
|
||||||
SecretKeySpec keySpec = new SecretKeySpec(toHash256ByteArray(key), "AES");
|
|
||||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
|
||||||
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
|
|
||||||
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
|
|
||||||
byte[] encrypted = cipher.doFinal(src.getBytes(StandardCharsets.UTF_8));
|
|
||||||
return Base64.getMimeEncoder().encode(encrypted);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String encryptToHex(String src, String key, String iv) {
|
|
||||||
try {
|
|
||||||
return byteArrayToHex(encrypt(src, key, iv));
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String decrypt(byte[] src, String key, String iv) {
|
|
||||||
try {
|
|
||||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
|
||||||
SecretKeySpec keySpec = new SecretKeySpec(toHash256ByteArray(key), "AES");
|
|
||||||
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
|
|
||||||
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
|
|
||||||
byte[] encrypted = Base64.getMimeDecoder().decode(src);
|
|
||||||
return new String(cipher.doFinal(encrypted), StandardCharsets.UTF_8);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String decryptByHex(String src, String key, String iv) {
|
|
||||||
try {
|
|
||||||
return decrypt(hexToByteArray(src), key, iv);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static byte[] toHash256ByteArray(String src) {
|
|
||||||
try {
|
|
||||||
MessageDigest digester = MessageDigest.getInstance("SHA-256");
|
|
||||||
digester.update(src.getBytes(StandardCharsets.UTF_8));
|
|
||||||
return digester.digest();
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
throw new RuntimeException(e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String byteArrayToHex(byte[] src) {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
for (int i = 0; i < src.length; i++) {
|
|
||||||
String hex = Integer.toHexString(src[i] & 0xFF);
|
|
||||||
if (hex.length() == 1) {
|
|
||||||
hex = '0' + hex;
|
|
||||||
}
|
|
||||||
sb.append(hex.toUpperCase(Locale.ENGLISH));
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
static byte[] hexToByteArray(String src) {
|
|
||||||
byte[] bytes = new byte[src.length() / 2];
|
|
||||||
for (int index = 0; index <= src.length() - 1; index += 2) {
|
|
||||||
String sub = src.substring(index, index + 2);
|
|
||||||
int value = Integer.parseInt(sub, 16);
|
|
||||||
bytes[index / 2] = (byte) value;
|
|
||||||
}
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String padRight(String str, int len, char c) {
|
|
||||||
int offset = len - str.length();
|
|
||||||
if (offset <= 0) {
|
|
||||||
return str;
|
|
||||||
} else {
|
|
||||||
char[] chars = new char[len];
|
|
||||||
System.arraycopy(str.toCharArray(), 0, chars, 0, str.length());
|
|
||||||
|
|
||||||
for (int i = str.length(); i < len; ++i) {
|
|
||||||
chars[i] = c;
|
|
||||||
}
|
|
||||||
return new String(chars);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static String padLeft(String str, int len, char c) {
|
|
||||||
int offset = len - str.length();
|
|
||||||
if (offset <= 0) return str;
|
|
||||||
char[] chars = new char[len];
|
|
||||||
System.arraycopy(str.toCharArray(), 0, chars, offset, str.length());
|
|
||||||
for (int i = 0; i < offset; i++) {
|
|
||||||
chars[i] = c;
|
|
||||||
}
|
|
||||||
return new String(chars);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static class MD5 {
|
|
||||||
|
|
||||||
static String md5(String str, int bit) {
|
|
||||||
String result = null;
|
|
||||||
try {
|
|
||||||
if (bit == 64 || bit == 32 || bit == 16) {
|
|
||||||
byte[] data = str.getBytes(StandardCharsets.UTF_8);
|
|
||||||
MessageDigest md = MessageDigest.getInstance("md5");
|
|
||||||
if (bit == 64) {
|
|
||||||
Base64.Encoder encoder = Base64.getMimeEncoder();
|
|
||||||
result = encoder.encodeToString(md.digest(data));
|
|
||||||
} else {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
md.update(data);
|
|
||||||
byte[] bytes = md.digest();
|
|
||||||
int i = 0;
|
|
||||||
for (byte b : bytes) {
|
|
||||||
i = b;
|
|
||||||
if (i < 0)
|
|
||||||
i += 256;
|
|
||||||
if (i < 16) {
|
|
||||||
sb.append("00");
|
|
||||||
} else {
|
|
||||||
sb.append(Integer.toHexString(b & 0xFF));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result = sb.toString().toUpperCase();
|
|
||||||
if (bit == 16) {
|
|
||||||
result = result.substring(8, 24);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static class BASE64 {
|
|
||||||
|
|
||||||
static String encode(String src) {
|
|
||||||
if (src == null) return null;
|
|
||||||
Base64.Encoder encoder = Base64.getEncoder();
|
|
||||||
return encoder.encodeToString(src.getBytes(StandardCharsets.UTF_8));
|
|
||||||
}
|
|
||||||
|
|
||||||
static String decode(String src) {
|
|
||||||
if (src == null) return null;
|
|
||||||
Base64.Decoder encoder = Base64.getDecoder();
|
|
||||||
return new String(encoder.decode(src), StandardCharsets.UTF_8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
String id = "e0246ac8-d382-460c-8540-fca750bbeb5b";
|
|
||||||
String username = "成都强森化工有限公司";
|
|
||||||
String password = "";
|
|
||||||
String encrypt = encryptPasswd(id, username, password);
|
|
||||||
System.out.println(encrypt);
|
|
||||||
String decrypt = decryptPasswd(id, encrypt);
|
|
||||||
System.out.println(decrypt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user