创作来自网上的资源整合
import java.io.InputStream;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.io.IOUtils;
import com.kindo.doctor.config.DataPrivider;
import lombok.extern.slf4j.Slf4j;
/**
* @author Bob.chen
* @date 2018年11月15日-上午11:04:36
* @desc
*/
@Slf4j
public class CryptoUtils {
private static final String VIPARA = "www.kindo.com.cn";
private static final String KEY = "kindo";
private static Cipher cipher = null;
private static SecretKeySpec key = null;
private static IvParameterSpec zeroIv = null;
static {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者
kgen.init(128, new SecureRandom(KEY.getBytes()));
SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥
byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥
key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥
zeroIv = new IvParameterSpec(VIPARA.getBytes());
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
log.error("初始化秘钥信息异常",e);
}
}
public static String decrypt(String input) {
try {
cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
byte[] content = parseHexStr2Byte(input);
byte[] result = cipher.doFinal(content);
return new String(result);
} catch (Exception e) {
}
return null;
}
public static void encrypt() throws Exception {
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
InputStream dictFileInStream = DataPrivider.class.getClassLoader()
.getResourceAsStream("data-d.json");
String dictContent = IOUtils.toString(dictFileInStream,"UTF-8");
byte[] byteContent = dictContent.getBytes("utf-8");
byte[] doFinal = cipher.doFinal(byteContent);
String parseByte2HexStr = parseByte2HexStr(doFinal);
System.out.println(parseByte2HexStr);
System.out.println(decrypt(parseByte2HexStr));
}
/**将二进制转换成16进制
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
/**将16进制转换为二进制
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
public static void main(String[] args) throws Exception {
encrypt();
}