🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 文献:GBT 38674-2020信息安全技术 应用软件安全编程指南 ![](https://img.kancloud.cn/f5/2e/f52e0ae8b4725e9914e7755bf91d371e_988x316.png) ## 问题01:什么是MD5? MD5消息摘要算法(英语:MD5: **Message-Digest Algorithm**),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节,32个16进制)的散列值(hash value),用于**确保信息传输完整一致**。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 中被加以规范。 * [ ] 1. 不可逆 * [ ] 2. 压缩性(简化信息、定长结果) * [ ] 3. 抗碰撞性 * [ ] 4. 抗修改性 * [ ] 5. 易计算 ### 作用: > 1. 文件一致性校验 > 2. 密码加密 java.security.MessageDigest [https://docs.oracle.com/javase/8/docs/api/](https://docs.oracle.com/javase/8/docs/api/) ## 问题02:MD5的基本步骤? 1. 初始化信息摘要 ``` MessageDigest md = MessageDigest.getInstance("SHA-256"); ``` 2. 使用字节数组更新信息摘要 ``` md.update(str.getBytes()); ``` 3. 完成信息摘要 ``` byte ss[] = md.digest(); ``` 4. 将字节数组转为十六进制 ``` reStr = bytes2String(ss); ``` ## 问题03:利用MD5对用户信息进行加密。 ![](https://img.kancloud.cn/7e/a7/7ea716d54cb3baf7c9baa995a536bfa4_970x157.png) ``` //对密码进行加密 password = Conver2MD5.getSHA256(password); ``` > 同一字符,加密后的16进制数是不变的,但自从出现彩虹表,可以反查数据 > 为了防止彩虹表反查,需要进行**加盐**处理。 ``` Conver2MD5.getSHA256(username+password+"pzhu"); ``` ## 问题04:实现前后端加密。 * [ ] 虽然对数据库进行了加密,但是在传输过程中并没有加密 [http://jwci.pzhu.cn/jsxsd/xk/LoginToXk](http://jwci.pzhu.cn/jsxsd/xk/LoginToXk) ![](https://img.kancloud.cn/f4/a3/f4a3fff9ac847a3985a18c5eea1d872a_798x358.png) [http://218.6.132.25/aexp/](http://218.6.132.25/aexp/) ![](https://img.kancloud.cn/b6/10/b610c3920ad17fffea1e5989d6978b47_939x509.png) ![](https://img.kancloud.cn/9f/ba/9fba900fe407bd09b943c75ca173a31f_1353x629.png) ## 问题05:实现防止网络监听。 * [ ] 1. 使用二次验证 * [ ] 2. 混入时间令牌(一次一密)