java加密工具类,可设置对应的加解密key

java加密工具类,可设置对应的加解密key

大家好,又见面了,我是你们的朋友全栈君。

public class AesEncryptUtil {
    
    //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!
    private static String KEY ="whshenke20180606";
    
    private static String IV ="whshenke20180606";    
    /**
     * 加密方法
     * @param data  要加密的数据
     * @param key 加密key
     * @param iv 加密iv
     * @return 加密的结果
     * @throws Exception
     */
    public static String encrypt(String data, String key, String iv) throws Exception {
        try {

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"
            int blockSize = cipher.getBlockSize();

            byte[] dataBytes = data.getBytes();
            int plaintextLength = dataBytes.length;
            if (plaintextLength % blockSize != 0) {
                plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
            }

            byte[] plaintext = new byte[plaintextLength];
            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);

            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(plaintext);

            return Base64Util.encode(encrypted);
            
            

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 解密方法
     * @param data 要解密的数据
     * @param key  解密key   
     * @param iv 解密iv
     * @return 解密的结果
     * @throws Exception whshenke20180606
     */
    public static String desEncrypt(String data, String key, String iv)  {
        try {
            byte[] encrypted1 = Base64Util.decode(data);

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original, "UTF-8");
            return originalString;
        } catch (Exception e) {
            //e.printStackTrace();
            return null;
        }
        
        
    }
    
    /**
     * 使用默认的key和iv加密
     * @param data
     * @return
     * @throws Exception
     */
    public static String encrypt(String data) throws Exception {
        return encrypt(data, KEY, IV);
    }
    
    /**
     * 使用默认的key和iv解密
     * @param data
     * @return
     * @throws Exception
     */
    public static String desEncrypt(String data){
        return desEncrypt(data, KEY, IV);
    }
    
    
    
    /**
    * 测试
    */
    public static void main(String args[]) throws Exception {
        //KNnAbiCvFxispeG+wS01jA==    
        //KNnAbiCvFxispeG+wS01jA==
        //KNnAbiCvFxispeG+wS01jA==
        String test = "测试";

        String data = null;
        String key = "dufy20170329java";
        String iv = "dufy20170329java";

    //    data = encrypt(test, key, iv);
//KNnAbiCvFxispeG+wS01jA==
        
        System.out.println(data);
        System.out.println(desEncrypt("8XguKV2aprVwg4UqEie7f9gkr7xDaSKrGZZD7x1J3uISWkvQAtpq8hpkskwi V+8bJmRcmQWIZ4sRom37GB7w7O4AH+HjH5ixViJ7k6bx+oEFVWSmIqKEj4e5 lMcyXgcXpTB8IGnt1WKS2p7Qnn+cjA==", key, iv));
    }
    
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107460.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 高德地图获取shp文件_手机高德地图坐标拾取

    高德地图获取shp文件_手机高德地图坐标拾取转载自:http://blog.csdn.net/yukimineryuu/article/details/50933582用Eclipse获取sha1值比较简单。最近自己换了androidstudio开发,申请key的时候,要两个版本的sha1值。一个是开发版(debug),一个是发布版(release)。debug版本的sha1比较好获取,网上有介绍,这里

    2022年8月10日
    7
  • C语言指针函数和函数指针区别

    C语言指针函数和函数指针区别C语言函数指针和指针函数的区别C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址。指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。一、指针函数指针函数是返回指针的函数主体是函数,返回值是一个指针基本声明形式:返回数据类型+*+函数名+(变量类型1,……

    2022年6月22日
    20
  • 高分卫星系列介绍_高分6号卫星参数

    高分卫星系列介绍_高分6号卫星参数celestrak高分卫星系列TLEGAOFEN1,139150U13018A22047.13058851.0000039900000+064218-409992,23915097.8040117.23550018056314.685945.288614.76596516474837GAOFEN2,140118U14049A22047.06986400.0000059700000+084233-409994,240118

    2025年8月2日
    3
  • 伴随我们长大的经典—写给从80后的一批人[通俗易懂]

    伴随我们长大的经典—写给从80后的一批人[通俗易懂]很难从时间的范围来划分我们这代人具体是指哪一代人,有人说差三岁就是一代人了,我对这句话就有很深的体会,所以如果非要从时间角度来划分的话,我想我们这代人应该是现在正在高等学府就读的那批二十多岁左右的人,他们大致都出生在八二年到八八年这几年间。  写这篇东西的目的是为了纪念伴随我们一起长大的那些经典的东西,正是由于它们的存在,我们的童年时代才不至于那么无聊。  一、游戏类 

    2022年10月21日
    2
  • jbpm工作流 php,jBPM工作流组件

    jbpm工作流 php,jBPM工作流组件jBPM工作流组件如下图所示-1.开始事件它是该过程的起始节点。每个进程只有一个启动节点。此节点仅包含一个没有任何传入连接的传出连接。它具有以下属性:Id:节点的ID,它也应该是独一无二的。Name:节点的名称。2.结束事件它是流程的结束节点。进程可以包含多个End事件。此节点仅包含一个传入连接,不包含传出连接。它具有以下属性:Id:节点的ID,它也应该是独一无二的。Name:节点…

    2025年10月17日
    2
  • endnote参考文献改为文字(参考文献endnote格式)

    最简单的,自动下载style:打开endnote—-edit—-outputstyles—-openstylemaneger—-在新打开的界面中点击中部的getmoreontheweb,此时自动连接endnote官网,在网页中部的搜索窗口输入目标杂志名称,点击search,然后在弹出的resultsfound下方点击搜索结果后方的download,下载文件,之…

    2022年4月16日
    254

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号