目前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加密调接口,返回的数据需要解密,目前互通不了,找不到原因...相关推荐

  1. aes js 加盐值 解密_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互..._慕课猿问...

    目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...

  2. java 微信报关_微信开放平台,_请求微信报关接口返回的数据,微信开放平台 - phpStudy...

    请求微信报关接口返回的数据 请求微信报关 接口错误 552E051CB6F4DBC6029B8218DBD5A52A gh_4dbf09a0a18e 1342661701 20160825113538 ...

  3. java调用远程 接口_java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  4. 前端DES加密、base64编码,后端DES解密、base64解码

    项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...

  5. 获取java返回的数据_java调用第三方接口,获取接口返回的数据。

    java接收远程调用的数据,得到的是如上个数的返回内容,我怎么写才能获取到值,现在使用的请求方法如下: public static HttpResult postJsonData(String url ...

  6. java调用第三方接口_java调用第三方接口,获取接口返回的数据。

    java接收远程调用的数据,得到的是如上个数的返回内容,我怎么写才能获取到值,现在使用的请求方法如下: public static HttpResult postJsonData(String url ...

  7. java接口传输数据太多怎么优化,【java】怎样优化接口返回大体量数据?

    需求描述: 外围平台调用接口根据手机号查询用户的歌单推荐信息,每个用户会有一千条左右的推荐信息,每条推荐信息包括了,歌曲ID.歌曲名称.版权ID.试听地址字段. 我需要关联多张表查询,每次查询时间大概 ...

  8. AES、DES、RSA、base64、MD5、SHA加密

    对称加密: 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用.对称性加密也称为密钥加密. 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥 ...

  9. java调接口传值_关于调用第三方接口时传递参数是File类型的解决方式

    正版编程与类型系统讲解基于的应用 77.35元 (需用券) 去购买 > 最近项目,需要我调用另一个项目中的某个接口,接口的入参为File类型,要拿到此接口返回的数据@ApiOperation(& ...

最新文章

  1. linux关机告诉用户,在Linux服务器关机前向用户显示一条自定义消息
  2. OpenCV | 分水岭算法进行图像分割
  3. css--小白入门篇3
  4. MqSql的加锁分析
  5. 1048:有一门课不及格的学生
  6. 百度seo排名规则_SEO:百度搜索引擎排名规则都有哪些?
  7. java nextbyte()_java.util.Scanner.hasNextByte()方法实例
  8. XML的DTD约束和Schema约束
  9. cvi调用matlab dll,cvi通过artix调用matlab
  10. 向量对矩阵列空间的投影_向量(阵列)处理和超标量处理器
  11. Chrome 安装Axure 插件
  12. Docker的bridge和macvlan两种网络模式
  13. 大学生动物介绍网页设计作品 dreamweaver作业静态HTML网页设计模板 保护动物网页作业制作
  14. matlab coder 安装,MATLAB Coder
  15. html+css基础教程之html标题学习
  16. 如何正确的使用 Service?
  17. CSS Sprites(精灵图)
  18. 机械学习07: 常用统计分布:正态分布、T分布、卡方分布、F分布
  19. Matlab:利用Matlab软件进行GUI界面设计实现图像的基本操作
  20. No interface expected here

热门文章

  1. JS 事件冒泡整理 浏览器的事件流
  2. MySQL中根据A表画更新B表
  3. dreamweaver 8的替换功能
  4. (转)C# Color类图示
  5. select框的text与value值的获取(实用版)
  6. .net async/await 异步等待的数种情况
  7. UVA11424 GCD - Extreme (I)【欧拉函数打表】
  8. CCPC2020太原理工获得一枚奖牌
  9. 51Nod-1003 阶乘后面0的数量【分析思维】
  10. 极简算法 —— 判断两字符串是否为相同字母的不同顺序组成