首页 > 编程语言 >java 实现AES加解密后,与在线工具测试结果不一致

java 实现AES加解密后,与在线工具测试结果不一致

时间:2023-06-02 16:24:42浏览次数:58  
标签:AES sSrc return String 加解密 java null 加密

最近有个项目,因为参数里面带有sql可能是客户网关对参数做了防侵入,用简单的base64加密后居然还是不行,决定用AES加密。代码如下。

/**
     * 参数加密私钥
     */
    static final String paramPrivateKey="3dae12897b044f96";
声明密钥
/**
     * 加密
     * @param sSrc
     * @return
     * @throws Exception
     */
    public static String paramEncrypt(String sSrc) throws Exception {
        if (paramPrivateKey == null) {
            System.out.print("Key为空null");
            return null;
        }
        // 判断Key是否为16位
        if (paramPrivateKey.length() != 16) {
            System.out.print("Key长度不是16位");
            return null;
        }
        byte[] raw = paramPrivateKey.getBytes("utf-8");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
        return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
    }
加密
 /**
     * 解密
     * @param sSrc
     * @return
     * @throws Exception
     */
    public static String paramDecrypt(String sSrc){
        try {
            if(!StringUtils.hasLength(sSrc)){
                return "";
            }
            // 判断Key是否正确
            if (paramPrivateKey == null) {
                System.out.print("Key为空null");
                return null;
            }
            // 判断Key是否为16位
            if (paramPrivateKey.length() != 16) {
                System.out.print("Key长度不是16位");
                return null;
            }
            byte[] raw = paramPrivateKey.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密
            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original,"utf-8");
                return originalString;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
解密

这部分代码,网上很多,重点是同样的字符串加密后与在线网站的结果不一致,AES 加密/解密 - 在线工具 (toolhelper.cn)。打开网站看到有很多选项,经过查询才知道,java生成的都是使用默认参数,参考地址:JAVA实现AES加密、解密 - 奕锋博客 - 博客园 (cnblogs.com)

 

标签:AES,sSrc,return,String,加解密,java,null,加密
From: https://www.cnblogs.com/rolayblog/p/17452118.html

相关文章

  • 学Java必备EditPlus的安装与配置
    Editplus是一款很受欢迎的编辑器。简单的解释editplus软件的话,它就是一款功能更强大的记事本。除了普通的文本编辑之外,还有很多的其他特点。这篇文章详细讲讲Editplus的安装配置,配合视频观看学习效果更佳动力节点老杜的Java17版入门教程,详细讲了关于Editplus的安装配置这套JavaSE教......
  • Java 将字符串转换为Document对象
    可以使用JAXP(JavaAPIforXMLProcessing)提供的DocumentBuilder类将字符串数据转换成Document对象。具体步骤如下:1.创建一个DocumentBuilderFactory对象,用于创建DocumentBuilder对象。DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();2.创建一个D......
  • Java应用架构演变史
    垂直应用架构以MVC的垂直架构举例,MVC架构通常分为3层,展示层、控制层、模型层。通常基于MVC架构开发的应用代码会打成一个war包,部署在Tomcat等Web容器中。不同的业务模块间通过本地API进行调用,基本不存在跨进程的远程服务调用。垂直应用架构面临的挑战:复杂应用的开发和......
  • java中 static 关键词
    在Java中,static是一个关键字,可以用于变量、方法和代码块上。1.静态变量(staticvariable)静态变量是被声明为static的变量。它属于类,而不是属于任何一个对象的。因此,无论创建了多少个类的对象,静态变量只有一份拷贝,所有对象共享同一个静态变量。静态变量可以通过"类名.变量名"的方......
  • Java入门讲解之EditPlus的安装与配置
    正好在学习java,使用到EditPlus软件,跟大家分享一下editplus的安装与配置过程:也可以直接看视频安装,B站上动力节点老杜的Java17版入门教程,详细讲了关于Editplus的安装配置学习地址:https://www.bilibili.com/video/BV1ig4y1c7kPEditPlus的安装与配置为什么不建议初学者一开始就用......
  • eclipse集成Java性能分析神器JProfiler
    JProfiler是一款功能强大的Java开发分析工具,能帮助从事编程工作的朋友们分析你们的代码数据,确定内存泄漏并了解线程问题。1、下载JProfilerhttps://www.ej-technologies.com/download/jprofiler/files可以根据系统位数选择具体版本的JProfiler2、安装JProfiler下载绿色版本JPro......
  • Java Properties类
    Properties处理两种行,自然行和逻辑行。逻辑行:用反斜线在一行的末尾,会和相邻的下一行形成逻辑行,如下org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration自然行就是以\n or \r or \r\n结尾......
  • JAVA爬数据也是杠杠的,爬下杜大哥
    上篇分析的网站是国家级,没有真正编写代码爬取对应的数据,今天以“1药网”为例来爬一爬药品数据https://www.111.com.cn/1、分析网站进入网站首页2、点击一下“所有商品分类”,对应的网站地址如下https://www.111.com.cn/categories/先爬取所有的“分类”,然后在根据“分类”获取......
  • JAVA通过oshi获取系统和硬件信息
    JAVA通过oshi获取系统和硬件信息 一、引入jar包本项目主要使用第开源jar包:https://github.com/oshi/oshi<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</vers......
  • Java+Js实现文件下载
    Maven依赖<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.0</version></dependency>页面<!DOCTYPEhtml><......