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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|