先准备加密代码:
要求用户输入需要加密的数据,完成后在jar包同级目录下创建一个新的文件(代码会被打成jar包,双击jar包执行),文件中写入加密的密钥、加密前数据、加密后数据。
package myblog.other;
import java.io.File;
import java.io.FileOutputStream;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* AES加密工具类
*/
public class AESEncryptUtil {
private static final String KEY_ALGORITHM = "AES";
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默认的加密算法
private static byte[] initSecretKey() {
//返回生成指定算法密钥生成器的 KeyGenerator 对象
KeyGenerator kg = null;
try {
kg = KeyGenerator.getInstance(KEY_ALGORITHM);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return new byte[0];
}
//初始化此密钥生成器,使其具有确定的密钥大小
//AES 要求密钥长度为 128
kg.init(128);
//生成一个密钥
SecretKey secretKey = kg.generateKey();
return secretKey.getEncoded();
}
private static Key toKey(byte[] key) {
//生成密钥
return new SecretKeySpec(key, KEY_ALGORITHM);
}
private static byte[] encrypt(byte[] data, Key key) throws Exception {
return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM);
}
private static byte[] encrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {
//实例化
Cipher cipher = Cipher.getInstance(cipherAlgorithm);
//使用密钥初始化,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE, key);
//执行操作
return cipher.doFinal(data);
}
/**
* 字节数组转成16进制表示格式的字符串
*
* @param byteArray 需要转换的字节数组
* @return 16进制表示格式的字符串
**/
private static String toHexString(byte[] byteArray) {
if (byteArray == null || byteArray.length < 1)
throw new IllegalArgumentException("this byteArray must not be null or empty");
final StringBuilder hexString = new StringBuilder();
for (int i = 0; i < byteArray.length; i++) {
if ((byteArray[i] & 0xff) < 0x10)//0~F前面不零
hexString.append("0");
hexString.append(Integer.toHexString(0xFF & byteArray[i]));
}
return hexString.toString().toLowerCase();
}
public static void main(String[] args) throws Exception {
System.out.println("请输入加密数据:");
Scanner scanner = new Scanner(System.in);
String data = scanner.next();
scanner.close();
byte[] key = initSecretKey();
Key k = toKey(key); //生成秘钥
String s1 = "密钥:" + toHexString(key) + "\n";
String s2 = "加密前数据:" + data + "\n";
byte[] encryptData = encrypt(data.getBytes(), k);
String s3 = "加密后数据:" + toHexString(encryptData) + "\n";
String path = AESEncryptUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
File file = new File(new File(path).getParent());
FileOutputStream fos = new FileOutputStream(file + "/数据加密" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".txt");
fos.write(s1.getBytes());
fos.write(s2.getBytes());
fos.write(s3.getBytes());
fos.close();
}
}
打成jar包:
1.File-->Project Structure
2.选择Artifacts,点击+号,选择jar包,Empty
3.做jar包的相应配置;
4.选择相应的class文件;
5.创建Manifest.mf文件;
6.选择相应的Manifest.mf文件目录,可以填写一些信息如Main Class等;
7.idea上方菜单栏选择Build-->Build Artifacts;
8.选择创建的jar包,Build;
9.在对应的输出目录找到jar包,双击运行;
10.同级目录下出现txt文件,文件中保存加密的数据信息;