C++ Java和Node.js之间的AES加解密研究(ECB)
现在的软件没个前端后端移动端桌面端都不好意思拿出手。
不同平台之间通信时会遇到同样的数据同样的加密算法,Java、JS、C++、.Net算出来的不一样的抓狂情形。都知道肯定是各加密库的默认算法配置造成的差异,然而咱也不是加密算法专家,各种原理也是越看越晕,还是写代码试验最省心。
下面是各语言AES/ECB/128的加解密代码,经测试互相之间可通用。供参考(注意CTRL+C的话key变量不要忘了改)
Node.js 代码
1 | crypto = require('crypto'); |
Java/Android 代码
原代码是从这里抄来简化的:https://www.cnblogs.com/libo0125ok/p/7668026.html
1 | package com.example.myapplication; |
在Activity中测试
1 | package com.example.myapplication; |
C++代码 openssl版
1 |
|
其它
- 其它语言的有空慢慢加进来
- C++编译用的CMake文件
1
2
3
4
5
6cmake_minimum_required (VERSION 3.8)
find_package(OpenSSL REQUIRED)
add_executable (encryptcpp
"encryptcpp.cpp"
"encryptcpp.h")
target_link_libraries(encryptcpp PRIVATE OpenSSL::SSL OpenSSL::Crypto)
在Linux下只要装了CMake和OpenSSL就可以直接用了。Windows下各种麻烦,微软的工程师们估计也觉得有点坑,所以搞了一个vcpkg项目,可以和Linux的包管理一样安装代码库。VS可以直接引用,如果是CMake的话,要这样写:
1 | cmake .."-DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -G"Visual Studio 15" |
或者如果是用VS2017来管理CMake工程的话,菜单CMake\管理CMake设置,打开”CMakeSettings.json”文件,添加”variables”参数:
1 | { |