安全的信息发送器
来源:互联网 发布: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
短信接收逻辑,结合信息接收界面
东西大概做的就是这个样子,这里附上项目与大家共同学习。点我获取源码
- 安全的信息发送器
- 发送信息的程序
- 无线网络的安全信息
- 信息安全的“暗伤”
- 信息安全的职业生涯
- 信息安全的职业生涯
- 中国保险业的信息安全
- 信息安全的事
- 发送电子邮件的安全认证
- 重要的手机安全信息
- 1.1信息安全的概念
- 1.3信息安全的标准化
- 信息安全的马其顿防线
- 信息安全专家的故事
- IE信息栏的安全
- 【转】信息安全的职业生涯
- “云时代”的信息安全
- 信息安全的 CIA 三要素
- 对象复制
- DTD文档类型和HTML基础元素
- mac numbers fx
- 每天学点Linux之grep命令的使用
- idea中Git与GitHub的使用入门
- 安全的信息发送器
- 在标签选项卡中添加基本组件
- Android 实现背景音乐的播放及震动
- [swift]调用匿名函数初始化属性
- ionic的ion-tabs和ion-side-menus
- 经典的print_table学习
- 第3章——表、栈和队列
- mysql之连表查询:LEFT JOIN、RIGHT JOIN、INNER JOIN。
- Testdisk 操作指南