You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.6 KiB
Java

package com.kiisoo.ic.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.kiisoo.ic.system.entity.PrivilageAccountDO;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.spec.AlgorithmParameterSpec;
import java.util.HashMap;
import java.util.Map;
/**
* 密码加密类
* @author Arvin
*
*/
public class PasswordEncry {
/** 指定散列算法为md5 */
public static String algorithmName = "MD5";
/** 散列迭代次数 */
public final static int hashIterations = 2;
/** 随机数生成器 */
private static RandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator();
/**
* 生成随机盐值对密码进行加密
* @param userDO 登录识别串(用户名)
* @return
*/
public PrivilageAccountDO encrypt(PrivilageAccountDO userDO) {
userDO.setSalt(randomNumberGenerator.nextBytes().toHex());
String newPassword = new SimpleHash(algorithmName,userDO.getPassword(), ByteSource.Util.bytes(userDO.getCredentialsSalt()),hashIterations).toHex();
userDO.setPassword(newPassword);
return userDO;
}
public static String encode(String encrypdata, String ivdata, String sessionkey){
byte[] encrypData = Base64.decode(encrypdata);
byte[] ivData = Base64.decode(ivdata);
byte[] sessionKey = Base64.decode(sessionkey);
String str = "";
try {
str = decrypt(sessionKey, ivData, encrypData);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(StringUtils.isBlank(str)){
return "";
}
JSONObject json = JSON.parseObject(str);
System.out.println(str);
String phone = json.getString("purePhoneNumber");
return phone;
}
public static String decrypt(byte[] key, byte[] iv, byte[] encData) throws Exception {
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
//解析解密后的字符串  
return new String(cipher.doFinal(encData), "UTF-8");
}
}