C++ Java和Node.js之间的AES加解密研究(GCM)

下面是各语言AES/GCM/128的加解密代码,经测试互相之间可通用。供参考(注意CTRL+C的话key变量不要忘了改)
Java把加密数据与TAG连接在一起作为GCM密文,所以为了互相通信,其它语言实现也按这种方式组合。

Node.js 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
crypto = require('crypto');

/**
* aes加密
* @param data
* @param secretKey
*/
aesEncrypt = function(data, secretKey, iv) {
var md5 = crypto.createHash('md5');
var result = md5.update(secretKey).digest();
var cipher = crypto.createCipheriv('aes-128-gcm',result, iv);
const encrypted = cipher.update(data);
const final = cipher.final();
const tag = cipher.getAuthTag();
const res = Buffer.concat([encrypted, final, tag]); // java的GCM加密是把AuthTag合并在一起的
return res.toString('base64');
}

/**
* aes解密
* @param data
* @param secretKey
* @returns {*}
*/
aesDecrypt = function(encrypted, secretKey, iv ) {
var md5 = crypto.createHash('md5');
var result = md5.update(secretKey).digest();
var decipher = crypto.createDecipheriv('aes-128-gcm',result, iv);

var b = new Buffer(encrypted, 'base64')
decipher.setAuthTag(b.subarray(b.length - 16));
return decipher.update(b.subarray(0, b.length-16)) + decipher.final('utf8');
}

const data = "Across the Great Wall we can reach every corner in the world.";
const key = "vwOr2r";
const iv = "0123456789ABCDEF";
let encryptStr = aesEncrypt(data, key, iv);
console.log( encryptStr );
let out = aesDecrypt(encryptStr, key, iv);
console.log(out);

阅读全文

C++ Java和Node.js之间的AES加解密研究(ECB)

概述

现在的软件没个前端后端移动端桌面端都不好意思拿出手。

不同平台之间通信时会遇到同样的数据同样的加密算法,Java、JS、C++、.Net算出来的不一样的抓狂情形。都知道肯定是各加密库的默认算法配置造成的差异,然而咱也不是加密算法专家,各种原理也是越看越晕,还是写代码试验最省心。

阅读全文

这是自带的网页,当作记念

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

阅读全文

用VS Code编写QT代码

假设QT装在C:/Qt/Pre/5.10.1/msvc2017_64这里,项目名为hello.pro (pro文件可以用QT Creator生成)

C++智能提示配置:c_cpp_properties.json

在VSCODE里如果找不到头文件,会有波浪线边上还有个小灯泡,点之就会打开c_cpp_properties.json文件

阅读全文

利用VC-LTL编译QT5

更新:新版VC-LTL已经可以更简单的实现了,下面的文章仅供纪念~~!不要浪费时间阅读了!不要浪费时间阅读了!

VC-LTL介绍

如果你从搜索引擎找到这里,说明你已经知道VC-LTL是什么了。请直接跳到第二节看脚本。

阅读全文

C++老司机的Node.js学习记录

对于写惯C++这种强类型语言的人来说,js代码简直天马行空任性的要死啊有木有,很多写法完全无厘头啊有木有。还好有Typescript来让我缓一缓。

阅读全文

开始用Hexo了

Hexo

Hexo 是一个基于Node.js的静态博客生成软件。特点是用户只用专心写文章就行,它负责转成静态网页。

阅读全文