JFinal使用技巧-AesKit加密解密

没啥说的,就是调用一下JF里面自带的 AesKit 工具,可能有的社友不熟悉怎么用, 我这里有个例子,以前学习过,上石马~

import com.jfinal.kit.AesKit;
import com.jfinal.kit.Base64Kit;

import java.util.Scanner;

public class MyAesKit {

    public static void main(String[] args) {
        System.out.println("请输入需加密内容(回车键确认):");
        Scanner scan = new Scanner(System.in);
        String content = scan.nextLine();
        scan.close();

        //加密
        String encode = encode(content);

        //解密
        String contentP = decrypt(encode);

        System.out.println("———————————————加密内容—————————————————");
        System.out.println("原文:");
        System.out.println(content);
        System.out.println("密文:");
        System.out.println(encode);

        System.out.println("———————————————解密内容—————————————————");
        System.out.println("测试解密还原内容:");
        System.out.println(contentP);
    }

    public static String decrypt(String encode) {
        if (encode == null || encode.length() < 33) return null;
        //解密 (解析字符串, KEY),这里是一个例子,可以自己定义规则和打码加私盐
        return AesKit.decryptToStr(Base64Kit.decode(encode.substring(32)), encode.substring(0, 32));
    }

    public static String encode(String content) {
        String aesKey = AesKit.genAesKey();
        //转为字符串方便存储在配置文件中(加密)
        return aesKey.concat(Base64Kit.encode(AesKit.encrypt(content, aesKey)));
    }

}

可以配合PropKit使用,也可以配合其他字符串单操作

PropKit https://www.jfinal.com/doc/2-9

工具一起使用, 读取到密文,然后再调用一下解密即可得到原文。比如:

String contentP = MyAesKit.decrypt(PropKit.get("jdbcUrl"));

开发使用时候, 直接 执行main方法。

运维在服务器上临时使用的时候,建个.sh 文件快捷调用一下就可以了:

myAesKit.sh
#!/bin/bash
MAIN_CLASS=MyAesKit

# 生成 class path 值
APP_BASE_PATH=$(cd `dirname $0`; pwd)
CP=${APP_BASE_PATH}/config:${APP_BASE_PATH}/lib/*

# 运行,并在控制台输出信息
java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS}

cd 到项目目录, 然后执行 ./myAesKit.sh
https://www.jfinal.com/doc/1-3

说明:异常java.security.InvalidKeyException:illegal Key Size的解决方案

  1. 在官方网站下载JCE无限制权限策略文件(JDK7的下载地址:  http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

  2. 下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt

  3. 如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件

  4. 如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件



有用就点个赞~

评论区

happyboy

2019-11-13 11:04

@杜福忠 其实加密解密好处理,网上有的是代码。他遇到的难点应该是加密之后怎么让配置文件中的明文密码自动变为密文的。我猜的,因为他写的也不是太清楚。^_^

杜福忠

2019-11-13 11:17

@happyboy 应该吧,我简单的分享了一下,核心内容和使用流程写了一下,希望对他有帮助吧,需求扩展核心也是加密解密了。以前才学的时候, 加密解密都整的有点懵逼,网上代码整的一大坨,,最后发现JF里面有。。。只是没有写注释,而且咋转换为字符串能存起来也是是懵逼,配合AesKit和Base64Kit一起用,估计有不少人也不知道里面还藏着这个玩意哈哈

杜福忠

2019-11-13 11:20

@happyboy 17年学习的时候,就写过一篇文章 就是把整个明文配置文件启动的时候自动加密为 加密文件,代码整了一大坨,后面使用起来,其实也不是特别方便
https://www.jfinal.com/share/237

happyboy

2019-11-13 11:27

@杜福忠 如果是properties文件,其实本身就有办法直接set改变值。如果不是properties文件,利用enjoy获取加密版的内容(需要一结构一致的模板),然后覆盖一下原文件就行了,代码不会太多,思路还清晰。

杜福忠

2019-11-13 13:49

@happyboy 感觉很赞,如果用enjoy的话, 还能支持表达式等语法的骚操作

happyboy

2019-11-13 18:08

@杜福忠 只要是字符串,enjoy皆可撸!

不惑

2019-11-13 19:40

@杜福忠 JDK6+jFinal 3.4写个encode测试报错Illegal key size

杜福忠

2019-11-20 11:50

@不惑 升级JF版本,最好跟进到最新版本

yxkuser

2020-01-03 11:05

Illegal key size

或是的话

2020-10-16 18:25

Illegal key size

杜福忠

2020-10-16 18:38

@或是的话 升级JF版本,用java8+

小徐同学

2020-10-16 22:13

官方的AesKit有BUG

杜福忠

2020-10-17 12:45

@小徐同学 我用着正常了,升级试试 https://blog.csdn.net/dling8/article/details/84061948

jfinal009

2022-04-13 10:29

@杜福忠 jdk1.8 aesKey's length must be 32 有方案吗

杜福忠

2022-04-13 11:13

@jfinal009 先MD5?再转?

热门分享

扫码入社