安全的信息发送器

来源:互联网 发布:linux修改ftp用户密码 编辑:程序博客网 时间:2024/06/06 18:30

说明:

写了一个信息加密器,也算是为了以后写项目能够更加安全的进行信息传送打下基础吧。主要实现是采用Diffie-Hellman密钥交换,DES加密短信。自己的私钥根据口令产生存在数据库,访问需要口令。公钥保存在手机本地,供分享给别人。利用自己的私钥跟别人的公钥产生加密密钥K,用于DES算法进行短信内容加密,另外,别人分享来的公钥也保存在本地,随时可以变化,这样加密短信可以直接利用软件进行解密读取的安全短信加密器。

1. 思路展示

既然要实现安全短信加密器,那么工作就需要从两个方面展开,一个是最基础的信息加密,另一个则是更为重要的安全工作,也就是方便安全的加密密钥交换工作。

(1)信息加密方式:

常用的加密方式大体有:对称加密:AES、DES;非对称加密:RSA、SM2等
1. 最初的想法是使用SM2加密算法,因为这是作为国产的非对称椭圆密码算法,SM2还是值得我们去做一下去使用的,所以准备采用SM2算法。SM2算法使用椭圆密码算法,是非对称的密码算法,私钥自己保留进行解密,公钥公布供别人加密使用。
基于别的同学对SM2的Java实现,自己也对其进行了研究,并且导入了实现的SM2jar包,经过测试,加密工作能够走通。
2. 采用SM2算法可以实现信息的加密工作,但是当引入了DH密钥交换协议之后发现,在DH密钥基础上再去使用非对称的加密算法有些复杂,SM2接口自行产生私密钥,与DH交换密钥产生一定的冲突,并且非对称的加密算法在加解密时间上会远远逊色于对称密码算法,所以决定改用对称密码算法。之后便完成了对DES以及AES算法接口的实现。

(2)密钥交换方式:

基于安全考虑,毫无疑问,这里采用DH密钥交换协议进行密钥的交换,所要做的主要工作就是要完成对DH交换密钥接口的开发。DH密钥交换算法的参数主要有g:常数,与私钥结合产生私钥时使用;p:随机数,作为模数在用私钥产生私钥以及产生加密密钥K时使用;x:密钥,用于产生公钥以及加密密钥;y:公钥,由私钥产生,并且可以结合私钥产生加密密钥;k:密钥,由私钥以及公钥结合产生,用在信息加密中。基于安全考虑,DH算法中的g,p,x,y参数全都使用BigInteger形式,并且常数g,随机数p全都采用RFC3526中的大随机数。

(3)安全的信息加密实现方式:

已经确定了采用DH密钥交换协议以及对称密码算法之后,接下来的便是根据这些技术提出系统的实现方式。

1. 最基本的实现思路就是:用户打开系统输入口令来产生DH私钥x,由DH私钥x产生DH公钥y。然后通信双方采用短信的形式交换公钥,利用交换后的公钥以及自己的私钥产生DH加密密钥K,从而进行信息加密传输。
2. 具体的实现:
最初想法:在DH密钥产生界面中,用户输入口令,根据用户的口令直接将口令初始化为DH私钥X,基于私钥x产生公钥y,将y打印到屏幕上,用户复制y将公钥发送出去。这样实现的方式无法实现自己私钥公钥以及别人的公钥的记录,也就无法完成多次通信加密以及解密工作,所以提出改进。
改进想法:
在DH密钥产生时,需要输入口令和自己的手机号。
将口令进行MD5转化存入数据库,键值对为:自己的手机号—口令。
私钥x使用口令的MD5值产生,方便快捷。
产生的公钥Y以文件的形式保存在本地,文件名是xxx.txt,xxx指手机号。
别人发送过来的公钥y2也以同样的方式保存在本地文件中,文件名是xxx.txt,xxx指发送者的手机号。
将自己的手机号同样保存在本地文件,文件名是me.txt,每个手机值对应一个。
3. 加解密:
加密:
加密需存在本地me.txt文件,别人的公钥的存储文件xxx.txt。
加密时,用户输入口令,基于口令以及读取me.txt访问数据库获得私钥
读取别人的公钥的存储文件xxx.txt,根据公钥以及私钥产生加密密钥K
使用DES算法,以K为密钥进行加密
解密:
解密需存在本地me.txt文件,别人的公钥的存储文件xxx.txt。
解密时,读取me.txt访问数据库获得私钥
读取别人的公钥的存储文件xxx.txt,根据公钥以及私钥产生加密密钥K
使用DES算法,以K为密钥进行解密
4. 公钥交换处理:
公钥交换采用明文形式,以“yyy”为标志,用“:”将“yyy”标志与公钥分开。
获得公钥后将公钥保存在本地
5. 密文处理:
密文以“yyyy”为标志,用“:”将“yyyy”标志与密文分开
获得密文后以解密方式进行解密,然后以明文形式展现
6. 明文处理:
明文无标志位,不用处理,直接展示。

2. 具体实现:

(1) 界面介绍:

密钥产生界面:
输入发件人号码,即自己的手机号码
私钥,即口令。根据口令产生私钥
公钥,由输入的私钥产生的公钥,保存在本地,并表明文件地址
点击“生成”按钮,即可生成公钥,私钥
这里写图片描述

短信发送界面:
号码:收件人的号码
信息:即所需要发送的信息
发送方式:明文发送、密文发送
发送公钥时需要输入“yyy:”然后加公钥,以明文形式发送
发送密文时信息无需变化,只需要点击密文发送
密文发送点击后会弹出口令输入界面,输入之前用于产生私钥公钥的口令即可
没有私钥公钥时,点击没有密钥即可跳转至密钥生成界面
这里写图片描述
短信接收界面:
全部以明文形式展示,发送短信时点击新建短信
这里写图片描述

(2) 代码实现
工具类:
DhKey.java
Diffie-Hellman安全算法的工具类实现
这里写图片描述
这里写图片描述
这里写图片描述

MD5Util.java
MD5实现的工具类
这里写图片描述
这里写图片描述
这里写图片描述
AESUtil.java
AES算法实现的工具类
这里写图片描述
这里写图片描述

DESUtil.java
DES算法实现的工具类
这里写图片描述
这里写图片描述

FileUtil.java
文件操作相关的工具类
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
SQLiteHelper.java
数据库相关操作类
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

逻辑相关类:
ProduceKeyAct.java
密钥产生逻辑,结合密钥产生界面
这里写图片描述
SendSmsAct.Java
信息发送逻辑,结合信息发送界面
这里写图片描述
这里写图片描述
这里写图片描述

ReceiveSmsAct.java
短信接收逻辑,结合信息接收界面
这里写图片描述
这里写图片描述

东西大概做的就是这个样子,这里附上项目与大家共同学习。点我获取源码

原创粉丝点击