团队作业(五):冲刺总结

一、组员分工

学号 姓名 负责工作
20175217 吴一凡 RSA加密算法
20175225 张元瑞 DES加密算法
20175226 王鹏雲 DES加密算法
20175205 侯颖 前端
20175210 闵天 后端

二、项目完成步骤

1.RSA

2.DES

3.前端

(1)学习过程

(2)界面

4.后端

  • 安装配置Tomcat

  • Tomcat目录结构

混合密码通信系统

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步。

三、项目界面

四、码云链接

五、冲刺阶段照片

原文地址:https://www.cnblogs.com/rjxs/p/10964676.html