资源简介
该工具类主要用于微信公众号消息的加解密,我自己的博客也用到了https://blog.csdn.net/goodbye_youth/article/details/80653132
代码片段和文件信息
import org.apache.commons.codec.binary.base64;
import java.util.Arrays;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* @title: WXPublicUtils.java
* @Description: 提供接收和推送给公众平台消息的加解密接口(UTF8编码的字符串)
* @Author: xj
*/
/**
*
* - 第三方回复加密消息给公众平台
* - 第三方收到公众平台发送的消息,验证消息的安全性,并对消息进行解密。
*
* 说明:异常java.security.InvalidKeyException:illegal Key Size的解决方案
*
* - 在官方网站下载JCE无限制权限策略文件(JDK7的下载地址:
* http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
* - 下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
* - 如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件
* - 如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件
*
*/
public class WXPublicUtils {
private static base64 base64 = new base64();
// 生成4个字节的网络字节序
private static byte[] getNetworkBytesOrder(int sourceNumber) {
byte[] orderBytes = new byte[4];
orderBytes[3] = (byte) (sourceNumber & 0xFF);
orderBytes[2] = (byte) (sourceNumber >> 8 & 0xFF);
orderBytes[1] = (byte) (sourceNumber >> 16 & 0xFF);
orderBytes[0] = (byte) (sourceNumber >> 24 & 0xFF);
return orderBytes;
}
// 还原4个字节的网络字节序
private static int recoverNetworkBytesOrder(byte[] orderBytes) {
int sourceNumber = 0;
for (int i = 0; i < 4; i++) {
sourceNumber <<= 8;
sourceNumber |= orderBytes[i] & 0xff;
}
return sourceNumber;
}
// 随机生成16位字符串
public static String getRandomStr() {
String base = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789“;
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 16; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
/**
* 对明文进行加密.
*
* @param randomStr 随机字符串
* @param text 需要加密的明文
* @return 加密后base64编码的字符串
* @throws AesException aes加密失败
*/
public static String encrypt(String randomStr String text) throws AesException {
ByteGroup byteCollector = new ByteGroup();
byte[] randomStrBytes = randomStr.getBytes(WXConstants.CHARSET);
byte[] textBytes = text.getBytes(WXConstants.CHARSET);
byte[] networkBytesOrder = getNetworkBytesOrder(textBytes.length);
byte[] appidBytes = WXConstants.APPID.getBytes(WXConstants.CHARSET);
// randomStr + networkBytesOrder + text + appid
byteCollector.addBytes(randomStrBytes);
byteCollector.addBytes(networkBytesOrder);
byteCollector.addBytes(textBytes);
byteCollector.addBytes(appidBytes);
// ... + pad: 使用自定义的填充方式对明文进行补位填充
byte[] padBytes =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-06-11 17:14 aes\
文件 1723 2018-06-11 17:17 aes\AesException.java
文件 627 2018-06-11 17:18 aes\ByteGroup.java
文件 1479 2018-06-11 17:18 aes\PKCS7Encoder.java
文件 2958 2018-06-11 17:18 aes\SHA1.java
文件 2016 2018-06-11 17:19 aes\xm
文件 11061 2018-06-11 17:20 WXPublicUtils.java
- 上一篇:朝鲜操作系统
- 下一篇:图书管理系统 面向对象分析与设计
相关资源
- springboot+rabbitmq项目demo(亲测可正常运
- jxbrowser 所有版本通用的破解包
- 2017年-传智播客-张志君老师-SpringBoo
- Blob.js+Export2Excel.js
- 机会路由源代码+仿真工具(SCORP)
- POI中文帮助文档附带api手册.zip
- 2018双十一阿里供应链服务平台讲座
- 原银在线信贷平台概要设计说明书v
- office_word_api 开发文档
- sun.misc.Unsafe源码
- netty的视频90集
- Drool最新 中文文档
- mybatis3-api.chm
- 蚂蚁课堂每特学院第二期,高清不加
- poi 动态修改docx窗体域内容,并存为
- reportdesign基于lodop的vue简单打印设计工
- SpringBoot +vue 框架项目.zip
- 基于Servlet下的验证码功能的实现
- jdk-11中文api修订版.CHM
- 招商银行信用卡中心2018春招IT笔试数
- 2019年独家Kubernetes K8S与Jenkins的CI CD高
- 新闻管理系统前台和后台
- SWT帮助文档
- 手机银行后台管理系统
- js特效40套
- 差旅管理系统
- 支付宝电脑网站支付
- 基于Eclipse编写的在线支付软件
- mavenRepository 仓库 依赖
- 旅游订单系统
评论
共有 条评论