执行jar包AES加密数据,输出文件到当前目录

先准备加密代码:

要求用户输入需要加密的数据,完成后在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文件,文件中保存加密的数据信息;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值