aes js 加盐值 解密_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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot 1.5.2 集成kafka 简单例子

添加依赖 compile("org.springframework.kafka:spring-kafka:1.1.2.RELEASE") 添加application.properties #kafka # 指定kafka 代理地址&#xff0c;可以多个 spring.kafka.bootstrap-servers192.168.59.130:9092,192.168.59.131:9092,192.168.59.132:9092 # 指定默…

更新 绑定数据_Blazor 修仙之旅 组件与数据绑定

一.前言在第一篇文章初尝 Blazor WebAssembly中&#xff0c;有提到过组件(Component)这个概念。组件在 Blazor 中是必不可少的&#xff0c;UI 全靠它组装起来&#xff0c;和前端的 JS 组件是一个意思&#xff0c;比如&#xff1a;vue component、react component 等等。借用官方…

Struts2 拦截器: 拦截器与过滤器区别

1、首先要明确什么是拦截器、什么是过滤器 1.1 什么是拦截器&#xff1a; 拦截器&#xff0c;在AOP&#xff08;Aspect-Oriented Programming&#xff09;中用于在某个方法或字段被访问之前&#xff0c;进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。…

关于使用idea工具debug时,断点颜色由红色变成灰色解决方法

在使用断点调试的时候&#xff0c;发现断点由原来的红色变成灰色的&#xff0c;后来发现是由于错误操作将Debug断点调试禁用了 &#xff0c;只需要点击禁用按钮取消就可以了

改变图标颜色_LOL设计师宣布修改装备图标:提高清晰度、颜色差异化

在11月12日&#xff0c;英雄联盟更新到了最新的季前赛版本。这次官方除了对部分英雄进行改动&#xff0c;主要是对于装备的图标和属性进行了更新。而在图标更新后&#xff0c;很多装备的样子都发生了很大的变化。这也导致很多老玩家在进游戏后&#xff0c;看着装备栏发呆&#…

虚拟机中centos安装gcc

yum install gcc-c 一、首先是&#xff1a;使得虚拟机联网 使用NAT模式 虚拟机网络连接使用NAT模式&#xff0c;物理机网络连接使用Vmnet8。 虚拟机设置里面——网络适配器&#xff0c;网络连接选择NAT模式。 虚拟机菜单栏—编辑—虚拟网络编辑器&#xff0c;选择Vmnet8 NAT模式…

python查看汉字的编码_python有关汉字编码问题

python分为&#xff1a;程序编码(python安装程序)、文件编码。查看程序编码方式&#xff1a;sys.getdefaultencoding()查看文件编码方式&#xff1a;1.import chardet 2. f open(lianxi1-qus.py) data f.read() print chardet.detect(data)字符编码发展历程&#…

gcd(欧几里得算法)

基础 1 int gcd(int a,int b) 2 { 3 int r; 4 while(b>0) 5 { 6 ra%b; 7 ab; 8 br; 9 } 10 return a; 11 } View Code递归 1 int gcd(int a,int b) 2 { 3 return (b>0)?gcd(b,a%b):a; 4 } Vi…

网络摄像头sdk_SenseDLC嵌入式人像识别SDK 安防边缘的“小巨人”

随着这些年将人工智能技术赋能行业的不断深入&#xff0c;商汤科技对智慧城市建设有着更深的理解。通过不断实践发现&#xff0c;很多区域由于摄像头数量和布置等问题较难有效做到清晰的人脸抓拍&#xff0c;且单一的人脸识别会遇到诸多干扰&#xff0c;比如发型、胖瘦、年纪、…

使用最大似然法来求解线性模型(1)

在Coursera机器学习课程中&#xff0c;第一篇练习就是如何使用最小均方差(Least Square)来求解线性模型中的参数。本文从概率论的角度---最大化似然函数&#xff0c;来求解模型参数&#xff0c;得到线性模型。本文内容来源于&#xff1a;《A First Course of Machine Learning》…

.net aspose.words 域加载图片_使用Python批量替换csdn文章的图片链接

欢迎大家关注我的微信公众号“IT工匠”获取更多资源(涉及算法、数据结构、java、深度学习、计算机网络、python、Android等互联网技术资料)。前言笔者之前的写作习惯一直是在本地(MacTyporaIpac)写好之后将markdown代码粘贴到csdn&#xff0c;图片是Ipac自动上传到微博匿名图床…

Spring积累总结

1.spring 的优点&#xff1a; 1.降低了组件之间的耦合性 &#xff0c;实现了软件各层之间的解耦 2.可以使用容易提供的众多服务&#xff0c;如事务管理&#xff0c;消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术&#xff0c;利用它很容易实现如权限拦截&#xff0…

什么是公钥和私钥?

公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥)&#xff0c;将其中的一个向外界公开&#xff0c;称为公钥&#xff1b;另一个自己保留&#xff0c;称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候&#xff0c;如果用其…

基恩士上位机链路通讯_基恩士PLC通讯源码

基恩士PLC KV7000,8000还是比较好用的&#xff0c;那如何和上位机通讯&#xff0c;我把源码写出来了。采用上位链路通讯&#xff0c;基恩士官方给我们留了8501端口,这个端口有意思刚好是我生日。基恩士的资料我觉得做的特别好&#xff0c;能快速写源代码得益于官方资料特别详细…

第二次作业+105032014101

1、测试帖链接 http://www.cnblogs.com/ELPSY/p/6605831.html 2、提出的建议 该代码基本符合编码规则所需的正确性、稳定性、可读性的要求。 程序出现错误的地方在对于2月份日期的判定上&#xff0c;以“2000 2 30”的输入语句符合年月日的三个输入条件&#xff0c;但是这并不…