JAVA JNI 3des加解密

作为一个Java开发领域的老鸟,带领过各种各样团队,踩过千奇百怪的坑,想要总结下来,但是点点滴滴过于零散了, 所以先按照知识点的方式一个一个分享出来,希望对大家有切实的帮助。

本篇文章跟大家分享的是JAVA JNI 3DES加解密技术。

首先我先简单介绍下什么是JAVA JNI,什么是3DES加解密。

1 Java JNI介绍

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。效率、性能、安全性都比较高。

2 3DES介绍

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,安全性较高。

3 JAVA中为什么需要加密呢?为什么要用JAVA JNI?

我们知道JAVA后台经常需要跟客户端APP进行接口交互,那么为了保障交互数据的安全性,对数据进行加密就显得非常重要。

其次上面我们了解到JNI主要是c和c++的实现方式,所以JNI比JAVA效率更高。

最后对于安卓客户端来说很容易被反编译暴露安全性行问题,采用JNI编译生成的二进制库不易暴露安全性问题,更加的安全可靠。

4 编译环境

了解我们为什么要使用JAVA JNI进行加解密后,那么下面开始搭建开发及编译的环境,来进行实战!

  • windows下mingw环境搭建

① 首先去MinGW主页(www.mingw.org )下载最新版本的MinGW,直接点击网站右上方的Download Installer

② 运行MinGW Installer,界面如下:
这里写图片描述

③ 将Basic Setup中的Package都打上勾(实际上并不是所有的Package都有用,无脑操作的话就都勾上)。关于每个Package的作用后面会给出

④ 安装完之后将MinGW\bin配置到系统环境变量中。

⑤ 用cmd命令提示符输入: gcc -v。如果出现如下信息说明安装正确。

  • windows下CMake环境搭建

① 在CMake官网下载最新版本并安装

② 下载后,安装常规方式安装即可。 在安装时需要注意的是,为所有用户添加CMake环境变量

5 JAVA接口编写→使用C/C++实现本地方法→编译动态库→使用与测试

  • JAVA接口编写

接下来编写带有native声明的方法的java类

① 创建一个java工程

② 创建com.k3dx.game.zlib包

③ 创建NativeLib类

④ 编写加密、解密本地接口
这里写图片描述

  • 使用C/C++实现本地方法

然后来我们新建一个c++项目DesLib,DesLib目录下创建native.cpp,(JNI方法注册有动态和静态两种,本文主要使用静态注册的方式)。

① 编写des.h

② 编写des.cpp

③ 编写native.cpp实现JNI 3DES本地接口
这里写图片描述
这里写图片描述
- 编译动态库

然后继续在DesLib目录工作,编译出动态库。

① 编写CMakeLists.txt
这里写图片描述

② 编译生生成libdes.dll

当前目录下创建build目录

执行cmake –build ./build,build目录下生成libdes.dll

③ 将libdes.dll放入java.library.path,或者使用System.load(“E://libdes.dll”); 绝对路径

  • 使用与测试

最后我们来测试下我们的JNI动态库。

① 准备原始接口数据

“{\”cluster_name\”:\”21test\”,\”hearth\”:\”true\”}”;

大家看没有加密的数据完全是暴露的,里面的内容一目了然,安全根本得不到保证。

② 编写测试代码。

接下来我们将数据进行加密,看看加密后的数据是什么样的?
这里写图片描述

我先进行3DES加密,然后再将加密后的数据进行解密,最后得到原始数据。
这里写图片描述


总结
大家看,经过我们加密的原始数据已经变成数据安全性非常高的一串字符码,是不是极大的提高了我们数据交互的安全性?今后我们JAVA后台开发过程中就可以将接口进行3DES数据加密传输给客户端,然后由客户端进行解密得到原始数据,并且我们使用的是性能更高的二进制库,安全性将更高。


拓展
其实除了3DES加密方式以外,还有其他安全的加密方式。

  • 简单的加密方式:

① BASE64 严格地说,属于编码格式,而非加密算法

② MD5(Message Digest algorithm 5,信息摘要算法)

③ SHA(Secure Hash Algorithm,安全散列算法)

④ HMAC(Hash Message Authentication Code,散列消息鉴别码)

  • 高级加密方式:

① AESAES,全称为“Advanced Encryption Standard”,中文名“高级加密标准”,在密码学中又称 Rijndael 加密法

② PBE,全称为“Password Base Encryption”,中文名“基于口令加密”,是一种基于密码的加密算法,其特点是使用口令代替了密钥,而口令由用户自己掌管,采用随机数杂凑多重加密等方法保证数据的安全性。

③ RSA 算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

④ DH,全称为“Diffie-Hellman”,他是一种确保共享KEY安全穿越不安全网络的方法,也就是常说的密钥一致协议。

推荐一些文章给大家:

https://www.runoob.com/w3cnote/java-encryption.html

https://blog.csdn.net/u013651026/article/details/79167360

源码下载:

https://github.com/chumj/desLib

下一期还有其他知识分享哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值