GZMachinesWeb/.svn/pristine/32/32d9358a899e4c18539805108fa...

165 lines
4.2 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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