package com.fr.plugin.jfsso.utils; import com.fr.log.FineLoggerFactory; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.io.IOException; import java.security.MessageDigest; import java.security.SecureRandom; public class EncryptUtils { /** * sha 加密 * @param str * @return */ public static String sha(String str){ String sha256Str = ""; try { MessageDigest sha256Deget = MessageDigest.getInstance("SHA-256"); byte[] sha256Encode = sha256Deget.digest(str.getBytes()); sha256Str = ByteToHexStr(sha256Encode); }catch (Exception e){ FineLoggerFactory.getLogger().info("FRLOG:SHA256加密异常:"+e.getMessage()); } return sha256Str; } /** * byte数组转16进制字符串 * @param bytes * @return */ private static String ByteToHexStr(byte[] bytes) { String hexStr = ""; for(int i =0;i= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '+' || c == '/' || c == '=') { continue; } else { return false; } } return true; } } /** * des加密 * @param datasource * @param password * @return */ public static String desEncrypt(String datasource, String password) { try { SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(password.getBytes()); // 创建一个密匙工厂,然后用它把DESKeySpec转换成 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(desKey); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, securekey, random); // 现在,获取数据并加密 // 正式执行加密操作 return base64Encode(cipher.doFinal(datasource.getBytes())); } catch (Throwable e) { FRUtils.FRLogInfo("des 加密异常 " + e.getMessage()); } return null; } /** * des 解密 * @param src * @param password * @return * @throws Exception */ public static String desDecrypt(String src, String password) throws Exception { // DES算法要求有一个可信任的随机数源 SecureRandom random = new SecureRandom(); // 创建一个DESKeySpec对象 DESKeySpec desKey = new DESKeySpec(password.getBytes("UTF-8")); // 创建一个密匙工厂 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // 将DESKeySpec对象转换成SecretKey对象 SecretKey securekey = keyFactory.generateSecret(desKey); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance("DES"); // 用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, securekey, random); // 真正开始解密操作 return new String(cipher.doFinal(base64DecodeB(src))); } }