165 lines
4.2 KiB
Plaintext
165 lines
4.2 KiB
Plaintext
package com.bonus.sys;
|
||
|
||
import java.security.MessageDigest;
|
||
import java.util.Random;
|
||
|
||
import org.apache.shiro.codec.Base64;
|
||
import org.apache.shiro.codec.Hex;
|
||
import org.apache.shiro.crypto.AesCipherService;
|
||
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
|
||
import org.apache.shiro.crypto.hash.Md5Hash;
|
||
|
||
/**
|
||
*
|
||
*/
|
||
public class CipherHelper {
|
||
|
||
private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
|
||
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
|
||
|
||
/**
|
||
* cipher password 加密成MD5
|
||
* @param inputString
|
||
* @return
|
||
*/
|
||
public static String generatePassword(String inputString) {
|
||
return encodeByMD5(inputString);
|
||
}
|
||
/**
|
||
* validate password
|
||
* @param password
|
||
* @param inputString
|
||
* @return
|
||
*/
|
||
public static boolean validatePassword(String password, String inputString) {
|
||
if (password.equals(encodeByMD5(inputString))) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
/**
|
||
* encode
|
||
* @param originString
|
||
* @return
|
||
*/
|
||
private static String encodeByMD5(String originString) {
|
||
if (originString != null) {
|
||
try {
|
||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||
byte[] results = md.digest(originString.getBytes());
|
||
String resultString = byteArrayToHexString(results);
|
||
return resultString.toUpperCase();
|
||
} catch (Exception ex) {
|
||
ex.printStackTrace();
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
/**
|
||
* change the Byte[] to hex string
|
||
* @param b
|
||
* @return
|
||
*/
|
||
private static String byteArrayToHexString(byte[] b) {
|
||
StringBuffer resultSb = new StringBuffer();
|
||
for (int i = 0; i < b.length; i++) {
|
||
resultSb.append(byteToHexString(b[i]));
|
||
}
|
||
return resultSb.toString();
|
||
}
|
||
|
||
/**
|
||
* change a byte to hex string
|
||
*
|
||
* @param b
|
||
* @return
|
||
*/
|
||
private static String byteToHexString(byte b) {
|
||
int n = b;
|
||
if (n < 0)
|
||
n = 256 + n;
|
||
int d1 = n / 16;
|
||
int d2 = n % 16;
|
||
return hexDigits[d1] + hexDigits[d2];
|
||
}
|
||
/**
|
||
* base64进制加密
|
||
*
|
||
* @param password
|
||
* @return
|
||
*/
|
||
public static String encrytBase64(String str) {
|
||
return Base64.encodeToString(str.getBytes());
|
||
}
|
||
/**
|
||
* base64进制解密
|
||
* @param cipherText
|
||
* @return
|
||
*/
|
||
public static String decryptBase64(String str) {
|
||
return Base64.decodeToString(str);
|
||
}
|
||
/**
|
||
* 16进制加密
|
||
*
|
||
* @param str
|
||
* @return
|
||
*/
|
||
public static String encrytHex(String str) {
|
||
return Hex.encodeToString(str.getBytes());
|
||
}
|
||
/**
|
||
* 16进制解密
|
||
* @param cipherText
|
||
* @return
|
||
*/
|
||
public static String decryptHex(String str) {
|
||
return new String(Hex.decode(str));
|
||
}
|
||
public static String generateKey() {
|
||
AesCipherService aesCipherService=new AesCipherService();
|
||
return Base64.encodeToString(aesCipherService.generateNewKey().getEncoded());
|
||
}
|
||
|
||
/**
|
||
* 生成盐
|
||
* @return
|
||
*/
|
||
public static String createSalt(){
|
||
return (new SecureRandomNumberGenerator()).nextBytes().toHex();
|
||
}
|
||
/**
|
||
* 组合username,两次迭代,对密码进行加密
|
||
* @param username 用户名
|
||
* @param password 密码
|
||
* @param salt 盐
|
||
* @return
|
||
*/
|
||
public static String createPwdEncrypt(String username,String password,String salt){
|
||
return new Md5Hash(password,username+salt,2).toBase64();
|
||
}
|
||
/**
|
||
* 生成随机数字和字母
|
||
* @param length 生成长度
|
||
* @return
|
||
*/
|
||
public static String createRandomString(int length) {
|
||
String val = "";
|
||
Random random = new Random();
|
||
//参数length,表示生成几位随机数
|
||
for(int i = 0; i < length; i++) {
|
||
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
|
||
//输出字母还是数字
|
||
if( "char".equalsIgnoreCase(charOrNum) ) {
|
||
//输出是大写字母还是小写字母
|
||
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
|
||
val += (char)(random.nextInt(26) + temp);
|
||
} else if( "num".equalsIgnoreCase(charOrNum) ) {
|
||
val += String.valueOf(random.nextInt(10));
|
||
}
|
||
}
|
||
return val;
|
||
}
|
||
|
||
} |