一、组员分工
学号 |
姓名 |
负责工作 |
20175217 |
吴一凡 |
RSA加密算法 |
20175225 |
张元瑞 |
DES加密算法 |
20175226 |
王鹏雲 |
DES加密算法 |
20175205 |
侯颖 |
前端 |
20175210 |
闵天 |
后端 |
二、项目完成步骤
1.RSA
2.DES
3.前端
(1)学习过程
(2)界面
4.后端
混合密码通信系统
5.总结
(1)整体思路
- 1A产生一个公私钥对,然后发送包含公钥和A的标识符(邮箱)的消息给服务器。
- 2服务器将A的信息(邮箱和公钥)存入以邮箱为主键的数据库中。
- 3B发送接收方的标识(邮箱)和明文给服务器。
- 4服务器根据接收方的标识(邮箱)从数据库中读取公钥。产生DESede秘钥,用DESede秘钥加密明文后,再用读取的公钥加密秘钥,最后将密文和加密后的秘钥发送至接收方邮箱。
- 5接收方用私钥解密。
(2)具体的功能
- 1Mail.java 邮件的发送。我组直接用的qq邮箱的服务器。即 smtp.qq.com。具体的可以参考这篇博客 java 实现邮件发送。
- 2RSA.java 与 DES.java 。为避免错误,使用java标准库中的类进行操作,方法蓝墨云班课上有。但混合密码很重要的一点就是生成的秘钥要用base64标准编码,解密时先将秘钥解码,再用于解密。我组失败了很多次,最后还是这种办法有效地解决了RSA解密出现乱码的问题。
除编码的问题外,RSA不适用于加解密过长的数据,而在此项目中DESede的秘钥也就168位,因此RSA.java 并不需要提供分块加密(大文件的功能)。
- 3Mysql.java 读写数据库。将用户id(邮箱)和其的公钥存储到数据库中,邮箱作为主键。这里用到了mysql里的 replace into 命令,这个命令的好处就是如果不存在此项就添加,存在就更新修改,这样服务端更新公钥就方便了。使用replace into 命令的更新功能要设定主键!
- 4UploadPublicKey.java 。客户端上传文件到服务器,这是servlet 程序响应客户端http请求的一个很好的体现。
- 5GetShell.java 。服务器发送/shell里的压缩包到客户端(这里是web应用的根目录),压缩包里有两个脚本和一些java类。getRSAKey.sh 用于生成公钥和私钥,私钥自己保管,公钥上传。decrypt.sh用于解密,但我不会写脚本,导致成功运行此脚本解密的前提是 将密文,加密后的DESede秘钥,私钥,都放到脚本所在的文件夹下。
- 6Encrypt.java。这个实现了以下几个步骤:
- 1获取发送方从客户端上传的明文和发送方,接收方id(邮箱),根据双方的ID在/WED-INF/uploadEncrypt目录下创建一临时目录,将明文放置此目录下。
- 2根据接收方id,从数据库中读取公钥。
- 3生成一DESede秘钥,用此加密明文。
- 4用公钥加密DESede秘钥。
- 5发送密文与加密后的秘钥至接收方邮箱。
- 6删除临时目录。
这里其实有个很大的问题,就是如果接收方没有往数据库中提交过秘钥,发送方并不会得到提示。
-7MixedEncrypt.java 实现6中的3,4步。
三、项目界面
四、码云链接
五、冲刺阶段照片
posted @
2019-06-02 22:48
日渐消瘦
阅读(
167)
评论()
编辑
收藏
举报