【工具类】JAVA (Android Studio )+ JS 加密解密 AES + Base 64

JAVA (Android Studio )+ JS 加密解密 AES + Base 64

前言

整个过程:

  • JS 接口先用AES加密,然后加密内容转Base64 编码;
  • JAVA进行Base64解码,然后用AES解密。

在这个过程JS用到了 CryptoJS v3.1.2 库;JAVA 由于JDK 17,不需要导入外部 javax.crypto ,由于存在Base 64 解码过程,import java.util.Base64; 的使用要求minSdk 是26,也就是Android 8.0

在使用AES 加解密过程中,最头疼的就是AES解密后是字节数组,如果转String ,或者String转字节数组,会加解密失败,究其原因,主要是 getBytes()new String() 有一个编码规则的问题,需要指定,因此索性直接再加一层Base 64。

还有一个问题是,看网上说JAVA 中 填充方式 在JDK 8前不支持 PKCS7Padding ,JDK 8 后就有 。由于是JDK17,所以PKCS5Padding 和PKCS7Padding 都可以使用。但看了网上的介绍,其实pkcs5在AES中是不可以使用的,通常我们在AES中所说的pkcs5指的就是pkcs7 。所以为了避免代码在JDK8报错,而且只用了ASE算法,索性解密设置时也采用PKCS5Padding,JS加密用PKCS7Padding。当然啦,也可以导入bcprov-ext-jdk16来支持PKCS7Padding。

用得第三方测试工具,进行ASE +Base 64 加解密验证,设置AES/CBC/PKCS7Padding。

JAVA 代码(解密)

java 复制代码
private String KEY ="密钥";
private String IV ="偏移量";
java 复制代码
try {
				String encryptUrl ="加密网址";
                byte[] decodedBytes = Base64.getDecoder().decode(encryptUrl);
                Cipher cipher =Cipher.getInstance("AES/CBC/PKCS5Padding");
                SecretKeySpec secretKeySpec =new SecretKeySpec(KEY.getBytes(),"AES");
                IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes());
                cipher.init(Cipher.DECRYPT_MODE,secretKeySpec,ivParameterSpec);
                byte[] bytes =cipher.doFinal(decodedBytes);
                String decryptUrl = new String(bytes);
                Log.v("TAG","解密网址:"+decryptUrl);
                Toast.makeText(this,"解密网址:"+decryptUrl,Toast.LENGTH_LONG).show();
                mWebView.loadUrl(decryptUrl);
            }catch (Exception e) {
                Log.e("TAG", "URL解密失败:"+e.getMessage());
                Toast.makeText(this,"URL解密失败:"+e.getMessage(),Toast.LENGTH_LONG).show();
                mWebView.loadUrl("解密失败加载的网址");
            }

JS代码(加密)

javascript 复制代码
function webUrl() {//AES + Base 64
    var url = "需要加密的网址";
    var loadWeb = encrypt(url, "密钥", "偏移量");
    return loadWeb;
}

用到的crypto-js_v3.1.2.js 方法已经上传,下载后将webUrl()方法放入这个就可以调用。用得都是JS语言。

相关推荐
翊谦3 小时前
Java Agent开发 Milvus 向量数据库安装
java·数据库·milvus
晓晓hh3 小时前
JavaSE学习——迭代器
java·开发语言·学习
查古穆3 小时前
栈-有效的括号
java·数据结构·算法
kyriewen114 小时前
你点的“刷新”是假刷新?前端路由的瞒天过海术
开发语言·前端·javascript·ecmascript·html5
Java面试题总结4 小时前
Spring - Bean 生命周期
java·spring·rpc
硅基诗人4 小时前
每日一道面试题 10:synchronized 与 ReentrantLock 的核心区别及生产环境如何选型?
java
014-code4 小时前
String.intern() 到底干了什么
java·开发语言·面试
摇滚侠4 小时前
JAVA 项目教程《苍穹外卖-12》,微信小程序项目,前后端分离,从开发到部署
java·开发语言·vue.js·node.js
楚国的小隐士5 小时前
为什么说Rust是对自闭症谱系人士友好的编程语言?
java·rust·编程·对比·自闭症·自闭症谱系障碍·神经多样性
Timer@5 小时前
LangChain 教程 04|Agent 详解:让 AI 学会“自己干活“
javascript·人工智能·langchain