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