首页 > 编程语言 >JAVA AES 加密算法实现

JAVA AES 加密算法实现

时间:2023-04-28 15:34:47浏览次数:39  
标签:AES JAVA String param iv Cipher key cipher 加密算法

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class AESUtil {
    private static final String DEFAULT_KEY="hj7x89H$yuBI0456";
    private static final String DEFAULT_IV ="NIfb&95GUY86Gfgh";
    /**
     * @Ddescription AES加密
     * @param key 16位秘钥
     * @param iv 向量iv
     * @param plaintext 明文
     * @return 密文
     */
    public static String encrypt(String key, String iv, String plaintext) throws Exception {
        Cipher cipher = getCipher(key,iv,Cipher.ENCRYPT_MODE);
        byte[] bytes = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(bytes);
    }

    /**
     * @Description AES解密
     * @param key 16位秘钥
     * @param iv 向量iv
     * @param ciphertext 密文
     * @return 明文
     */
    public static String decrypt(String key, String iv, String ciphertext) throws Exception {
        Cipher cipher = getCipher(key,iv,Cipher.DECRYPT_MODE);
        byte[] bytes = cipher.doFinal(Base64.getDecoder().decode(ciphertext));
        return new String(bytes,StandardCharsets.UTF_8);
    }

    private static Cipher getCipher(String key, String iv,int mode) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
        IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));
        cipher.init(mode, keySpec, ivSpec);
        return cipher;
    }

    public static void main(String[] args) throws Exception {
        String text = "JDK 中是由名为 “SunJCE” 的提供商提供密钥算法的,如果没有指定其他提供商,则会默认使用该提供商的密钥算法。如果要使用特定的算法,而对该算法 Oracle 公司没有提供支持,那么也可以指定其他的提供商。";
        String ciphertext = encrypt(DEFAULT_KEY,DEFAULT_IV,text);
        System.out.println(ciphertext);
        String plaintext = decrypt(DEFAULT_KEY,DEFAULT_IV,ciphertext);
        System.out.println(plaintext);
    }
}

标签:AES,JAVA,String,param,iv,Cipher,key,cipher,加密算法
From: https://www.cnblogs.com/xiaogblog/p/17362325.html

相关文章

  • Java 生成验证码
    后端:1、第一步生成验证码字符串privateStringgetCheckCode(){Stringbase="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";intsize=base.length();Randomr=newRandom();StringBuildersb=newStringBuilder();for(inti=1;i<=4;i+......
  • Could not create the Java virtual machine解决
    CouldnotcreatetheJavavirtualmachine解决原文链接:https://blog.csdn.net/weixin_42031680/article/details/118652127CouldnotcreatetheJavavirtualmachine的解决文章目录CouldnotcreatetheJavavirtualmachine的解决报错描述报错截图解决方案一:1.......
  • JavaFx 生成二维码工具类封装
    原文地址:JavaFx生成二维码工具类封装-Stars-One的杂货小窝之前星之音乐下载器有需要生成二维码功能,当时用的是一个开源库来实现的,但是没过多久,发现那个库依赖太多,有个http-client的依赖,把软件都搞大了一倍,而且有时候开发的时候下载依赖还报错,就想换个方案于是在网上......
  • java -jar XXX.jar 没有主清单属性以及找不到或无法加载主类的问题
    java-jarXXX.jar没有主清单属性以及找不到或无法加载主类的问题原文链接:https://blog.csdn.net/Mrzhuangr/article/details/124731024文章目录一、问题陈述二、解决方法1、方法一(问题没有真正解决)2、方法二(最终解决了问题)一、问题陈述环境:Idea2021jdk1.8......
  • Java 生成验证码
    1、第一步生成背景板publicvoidgenerateCheckCode(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{//服务器通知浏览器不要缓存response.setHeader("pragma","no-cache");response.setHeader("cache-con......
  • Java中二进制与十进制转换
    转: Java中二进制与十进制转换 十进制转二进制(除2取余,直到商小于1,逆序排序)如138转二进制138÷2=69 余069÷2=34余134÷2=17余017÷2=8余18÷2=4余04÷2=2余02÷2=1余01÷2= 0余1然后逆序排序1 0  0  0......
  • 中级软件设计师软考备考资源;解决org.apache.ibatis.binding.BindingException: Invali
    中级软件设计师软考备考资源软考资源在百度网盘上org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound)问题即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。这是一个很容易......
  • Unknown run configuration type SpringBootApplicationConfigurationType;Servlet Ser
    UnknownrunconfigurationtypeSpringBootApplicationConfigurationType社区版的idea自己安装插件,去配置大家可分享关于Java微服务相关知识,包括但不限于Java微服务开发经验、架构组成、技术交流、中间件等内容,我们鼓励springcloud架构为基础发散出击,从而达到技术积累的目的,快来沉......
  • Provisional heads are shown、NullPointerException空指针异常?堆栈与队列的区别?Java
    Provisionalheadsareshown排查是否插件拦截,我的以前没有这种,所以排除本地网络节点问题,连接不到图片服务器,以下是解决方法:1.进入到C盘Windows文件夹System32/drivers/etc目录下,打开hosts文件,绑定下2.改下本地dns为公共dns网络节点导致的问题,一般为运营商导致,产生问题的原因为......
  • JAVA+MySQL做一个图书信息管理系统【二次开发】【更新版2.0】【纯java】、Java技术分
    JAVA+MySQL做一个图书信息管理系统【二次开发】【更新版2.0】【纯java】Java技术分享Java技术er集合啦!大家可分享关于Java技术知识,包括但不限于微服务,分布式等前沿技术,快来沉淀自己的技术,一起写出未来吧!你可以从以下几个方面着手(不强制),或者根据自己对话题主题的理解进行创作,参考如......