通常信息游走在网络中,如果未加密,对于有心人来说这些信息就是唾手可得而且拿来就能用的利益,最简单的例子就是用户登录的用户名和密码,我们用抓包工具抓取数据包,打开之后用户名和密码就是以明文的状态显示在我们面前,在用户登录、两个网络终端之间的通信,app请求服务器等等任何涉及到敏感信息的地方都有信息泄露的风险。如何避免这种情况呢
- 使用Https协议
- 对数据进行加密
因为本文主要是对数据加密进行探究,所以https协议先大致说一下,以后再针对https总结一篇文章。
https协议,可以看作http的加强版,http不安全、无法加密、不需要证书等等,https协议是使用SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,需要申请证书。因为https会对传输的数据进行加密,并且可以判断数据是否被篡改过,所以https的安全本质上也是对数据进行加密,但是对于数据的一致性校验等相较于我们普通的数据加密要做的更为全面一点。所以使用https传输的数据相对来说是安全的,但是事无绝对,我们只能说是相对安全的,在木马病毒盛行的今天有可能数据在被加密之前数据就已经被窃取了。当然这些不在我们的讨论范围之内,接下来我们来说一说数据加密。
基于java的数据加密:
我们在两个系统之间进行数据传输,如何保证我们的数据安全呢,可能首先想到的就是我们的一些加密算法,简单一些的有BASE64、MD5、SHA等等,相较更复杂一些的有DES、RSA等等。但是如果我们服务端代码被取到了呢,我们知道java的class字节码反编译很容易就能得到java源码,里面的密钥等信息也都一目了然,这时候怎么办呢。
一般我们是通过java调用C/C++编写的加密/解密代码进行加密/解密,这里又要讲一下java的Native关键字。
Native关键字一般用在方法的返回值前面,例如:
public native void sayHello();
native 用来表示这是一个java调用非java代码的接口,一个完整的调用代码为:
public class test{
static{
System.loadLibrary("testNative");
}
public native void sayHello();
public static void main(String[] args){