首页 > 编程语言 >Java使用AES加密

Java使用AES加密

时间:2024-03-27 09:46:46浏览次数:34  
标签:AES 加密 String Exception return Cipher key Java throws

public class AESUtil {

    public static final String algorithm = "AES";
    // AES/CBC/NOPaddin
    // AES 默认模式
    // 使用CBC模式, 在初始化Cipher对象时, 需要增加参数, 初始化向量IV : IvParameterSpec iv = new
    // IvParameterSpec(key.getBytes());
    // NOPadding: 使用NOPadding模式时, 原文长度必须是8byte的整数倍
    // PKCS5Padding: 自动填充
    public static final String transformation = "AES/CBC/PKCS5Padding";
    public static final String key = "1234567812345678";

    /***
     * 加密
     * @param original 需要加密的参数(注意必须是16位)
     * @return
     * @throws Exception
     */
    public static String encryptByAES(String original) throws Exception {
        // 获取Cipher
        Cipher cipher = Cipher.getInstance(transformation);
        // 生成密钥
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), algorithm);
        // 指定模式(加密)和密钥
        // 创建初始化向量
        IvParameterSpec iv = new IvParameterSpec(key.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
        // cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        // 加密
        byte[] bytes = cipher.doFinal(original.getBytes());

        return encryptBASE64(bytes);
    }

    /**
     * 解密
     * @param encrypted 需要解密的参数
     * @return
     * @throws Exception
     */
    public static String decryptByAES(String encrypted) throws Exception {
        // 获取Cipher
        Cipher cipher = Cipher.getInstance(transformation);
        // 生成密钥
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), algorithm);
        // 指定模式(解密)和密钥
        // 创建初始化向量
        IvParameterSpec iv = new IvParameterSpec(key.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
        // cipher.init(Cipher.DECRYPT_MODE, keySpec);
        // 解密

        byte[] bytes = cipher.doFinal(decryBASE64(encrypted));

        return new String(bytes);
    }

    /***
     * BASE64解密
     * @param key
     * @return
     * @throws Exception
     */
    public static byte[] decryBASE64(String key) throws Exception{
        return (new BASE64Decoder()).decodeBuffer(key);
    }

    /***
     * BASE64加密
     * @param key
     * @return
     * @throws Exception
     */
    public static String encryptBASE64(byte[] key) throws Exception{
        return (new BASE64Encoder()).encode(key);
    }


}

标签:AES,加密,String,Exception,return,Cipher,key,Java,throws
From: https://www.cnblogs.com/eaglex3/p/18098204

相关文章

  • 学习java第二十四天
    spring框架中有哪些不同类型的事件Spring提供了以下5种标准的事件:上下文更新事件(ContextRefreshedEvent):在调用ConfigurableApplicationContext接口中的refresh方法时被触发。上下文开始事件(ContextStartedEvent):当容器调用ConfigurableApplicationContext的Start方法开始......
  • 市场数据和金融数据API的获取步骤,支持Python、Java、Go等接入方式,轻松实现量化数据交
    今天我想分享一个非常实用的技术内容,即如何通过接口API来实现订阅并接入实时行情数据源的报价信息。这个技术可以帮助你获取最新的市场数据,为你的应用程序或交易策略提供及时的信息支持。接入实时行情数据源可以让你了解市场动态并快速作出决策,非常有助于优化你的交易策略和投资决......
  • JavaSE_类型转换案例分析
    Java中的类型转换分为两种:自动类型转换(隐式类型转换)和强制类型转换(显式类型转换)。1.自动类型转换(隐式类型转换):当两个不同类型的数据进行运算时,Java会自动将较小的数据类型转换为较大的数据类型。例如,int类型和double类型进行运算时,int类型会自动转换为double类型。```javai......
  • Java Servlet学习
    一、了解Servlet1.实现一个基本的web应用(这个web应用中没有java小程序)找到CATALINA_HOME\webapps目录因为所有的webapp要放在这个目录下(tomcat服务器的要求)webapps目录下的每一个子目录就是一个web服务web服务中的页面的相对路径页面中超链接中ip地址和端口号可以省......
  • javascript基础代码练习
    一、输入新增病例数,累计确诊病例数,14天内聚集性疫情发生天数。新增或者累计确诊病例为0则该地区为低风险地区。新增大于0且累计确诊<50或者累计大于50且14天内聚集性疫情发生天数为0的地区为中风险地区。其他情况为高风险地区。<!DOCTYPEhtml><html><head>  <metachar......
  • java定义和使用类和对象
    1.下面是一个教师类Teacher,用于学校某个系部的管理。系部在管理教师时,所关心的信息主要有教师编号、姓名、性别、年龄、家庭住址、电话号码等,于是抽取这些属性来描述"教师"这个实体。考虑到教师年龄、家庭住址、电话号码等不宜对无关人员公开,于是将这些数据设为私有的成员变量(即......
  • Java数组(下)
    Java数组(下)多维数组多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组inta[][]=newint[2][5];//可以看成是一个两行五列的数组packagearray;publicclassArrayDemo05{publicstaticvoidmain(String[]args......
  • BitLocker和EFS(Encrypting File System)是Windows操作系统中用于数据加密的两种不同的
    BitLocker和EFS(EncryptingFileSystem)是Windows操作系统中用于数据加密的两种不同的功能。BitLocker:BitLocker是一种全磁盘加密技术,它可以加密整个硬盘驱动器上的数据,包括操作系统、应用程序和用户数据等。BitLocker可以保护计算机在启动时的数据安全,并且可以通过预启动认......
  • Java(匿名对象和命名对象)——进一步了解对象
    1.前面已知,想要抽象出一个对象,首先要写好它的模板——类但是存在一个问题,我们想创建一个对象,要用构造方法去初始化这个对象。但是如果我们只想在某个时候只使用这个对象一次,之后就不要用了,那是不是这个对象就会占我们的内存,就像我们借走别人的笔(这个对象),之后要还给别人。所以......
  • JDK tools-javadoc
    JDKtools-javadocJDK工具包-javadoc,从java源文件生成API文档的HTML页面javadoc工具解析一组java源文件中的声明和文档注释,并生成响应的HTML页面,这些页面描述(默认情况下)公共和保护属性的类、接口、构造函数、方法、字段。你可以使用javadoc工具为一组源文件生成API文档。......