java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...
目前Javascript使用'crypto-js'包。
前后台可以自己跑通加解密,但是,无法互通。
针对对象{}加密……网上的方案,已经尝试了4天左右了,还没成功,请指导。
无思路,无报错。
Java
package com.pactera.sms.foundbase.util;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AESUtils {
private static final String IV_STRING = "16-Bytes--String";
/**
* 加密方法
*
* @param seed
* 密钥
* @param clearText
* 明文
* @return
*/
public static String encrypt(String seed, String clearText) {
byte[] result = null;
try {
byte[] rawkey = getRawKey(seed.getBytes());
result = encrypt(rawkey, clearText.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
String content = toHex(result);
return content;
}
/**
* 解密方法
*
* @param seed
* @param encrypted
* @return
*/
public static String decrypt(String seed, String encrypted) {
byte[] rawKey;
try {
rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey, enc);
String coentn = new String(result);
return coentn;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr);
SecretKey sKey = kgen.generateKey();
byte[] raw = sKey.getEncoded();
return raw;
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
byte[] initParam = IV_STRING.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(
initParam));
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
private static byte[] decrypt(byte[] raw, byte[] encrypted)
throws Exception {
byte[] initParam = IV_STRING.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(
initParam));
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
public static String toHex(String txt) {
return toHex(txt.getBytes());
}
public static String fromHex(String hex) {
return new String(toByte(hex));
}
public static byte[] toByte(String hexString) {
int len = hexString.length() / 2;
byte[] result = new byte[len];
for (int i = 0; i < len; i++)
result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),
16).byteValue();
return result;
}
public static String toHex(byte[] buf) {
if (buf == null)
return "";
StringBuffer result = new StringBuffer(2 * buf.length);
for (int i = 0; i < buf.length; i++) {
appendHex(result, buf[i]);
}
return result.toString();
}
private static void appendHex(StringBuffer sb, byte b) {
final String HEX = "0123456789ABCDEF";
sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
}
}
32位的key
Javascript
import CryptoJS from 'crypto-js';
// 加密方法
export function Encrypt(data, key) {
key = handleAccountParam(key);
key = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.enc.Utf8.parse('16-Bytes--String');
var encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
// 解密方法
export function Decrypt(data, key) {
key = handleAccountParam(key);
key = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.enc.Utf8.parse('16-Bytes--String');
var decrypted = CryptoJS.AES.decrypt(data, key,
{
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var decryptedData = JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
return decryptedData;
}
export function handleAccountParam(str) {
if (str.length < 16) {
let length = 16 - str.length;
for (var i = 0; i < length; i++) {
str += 0;
}
} else if (str.length > 16) {
str = str.slice(0, 16)
}
return str;
}
java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...相关推荐
- aes js 加盐值 解密_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互..._慕课猿问...
目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...
- java 微信报关_微信开放平台,_请求微信报关接口返回的数据,微信开放平台 - phpStudy...
请求微信报关接口返回的数据 请求微信报关 接口错误 552E051CB6F4DBC6029B8218DBD5A52A gh_4dbf09a0a18e 1342661701 20160825113538 ...
- java调用远程 接口_java通过url调用远程接口返回json数据
java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...
- 前端DES加密、base64编码,后端DES解密、base64解码
项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...
- 获取java返回的数据_java调用第三方接口,获取接口返回的数据。
java接收远程调用的数据,得到的是如上个数的返回内容,我怎么写才能获取到值,现在使用的请求方法如下: public static HttpResult postJsonData(String url ...
- java调用第三方接口_java调用第三方接口,获取接口返回的数据。
java接收远程调用的数据,得到的是如上个数的返回内容,我怎么写才能获取到值,现在使用的请求方法如下: public static HttpResult postJsonData(String url ...
- java接口传输数据太多怎么优化,【java】怎样优化接口返回大体量数据?
需求描述: 外围平台调用接口根据手机号查询用户的歌单推荐信息,每个用户会有一千条左右的推荐信息,每条推荐信息包括了,歌曲ID.歌曲名称.版权ID.试听地址字段. 我需要关联多张表查询,每次查询时间大概 ...
- AES、DES、RSA、base64、MD5、SHA加密
对称加密: 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用.对称性加密也称为密钥加密. 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥 ...
- java调接口传值_关于调用第三方接口时传递参数是File类型的解决方式
正版编程与类型系统讲解基于的应用 77.35元 (需用券) 去购买 > 最近项目,需要我调用另一个项目中的某个接口,接口的入参为File类型,要拿到此接口返回的数据@ApiOperation(& ...
最新文章
- linux关机告诉用户,在Linux服务器关机前向用户显示一条自定义消息
- OpenCV | 分水岭算法进行图像分割
- css--小白入门篇3
- MqSql的加锁分析
- 1048:有一门课不及格的学生
- 百度seo排名规则_SEO:百度搜索引擎排名规则都有哪些?
- java nextbyte()_java.util.Scanner.hasNextByte()方法实例
- XML的DTD约束和Schema约束
- cvi调用matlab dll,cvi通过artix调用matlab
- 向量对矩阵列空间的投影_向量(阵列)处理和超标量处理器
- Chrome 安装Axure 插件
- Docker的bridge和macvlan两种网络模式
- 大学生动物介绍网页设计作品 dreamweaver作业静态HTML网页设计模板 保护动物网页作业制作
- matlab coder 安装,MATLAB Coder
- html+css基础教程之html标题学习
- 如何正确的使用 Service?
- CSS Sprites(精灵图)
- 机械学习07: 常用统计分布:正态分布、T分布、卡方分布、F分布
- Matlab:利用Matlab软件进行GUI界面设计实现图像的基本操作
- No interface expected here