此功能由于前后台交互的设计比较繁琐,所以此功能最好是一个人开发;在开发过程中所遇到的难点为:
1.由于在国企,需要找到一种被国企安全测试认可的方法。
2.此加密设计到前后台,需要找到一种前后台可以互相加解密的方法。
3.在加密的过程中还要进行数据完整性校验,防止恶意用户在传输数据中篡改数据。
在我的面向百度编程的模式下,最终定下了设计方案
整体流程:本系统加密传输采用三层加密方式,解决了数据保密性和传输完整性等漏洞;第一层加密方式为{明文#md5(明文)}的方式,用来做数据完整性校验;第二层对第一层加密之后的结果进行二次加密,加密方式采用RSA非对称加密,前台使用公钥进行加密,后台对应私钥解密;第三层加密为国密4中的ECB加密模式,对第二层加密之后的结果进行三次加密,加密之后的数据进行传输,保证了数据的保密性。
后端接受到前端传输过来的数据,先进行国密4中ECB模式进行解密,解密之后的数据通过RSA后端私钥进行二次解密,此次解密之后的结果为{明文#md5(明文)}这种形式,以“#”进行分割,将明文进行md5加密,与前端传输过来的md5(明文)进行对比,如果对比结果不同,则给出提示,数据传输完整性被破坏,此方式解决了项目没有数据完整性校验的问题。
1、前端加密
前端填写的明文:11112222
第一层:数据完整性校验加密,采用{明文#md5(明文)} 的组合方式进行一次加密。
加密后密文:11112222#821f3157e1a3456bfe1a000a1adf0862
第二层:采用RSA非对称加密的方式对第一层加密后的密文进行二次加密。
RSA公钥:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAnXPulvJauLsulRIiUJM0KvgFirtdF1k+VkZ8zxXkAE0DyJaY+4XwKx+mXKC9jvjvf+Sbez/yFUZigs/vPW6SqEWgemsjVl97Dk02mdrYxc0YV6fWH/7otPZ/p0BIJsWdDK/UdVXbSyy7myGxsINM+LlgflN322dmSJOUGCtWbwIDAQAB
RSA加密后密文:OG7UuV/Z4XezcckB8HmtVudvRHUG1nK05ARFX40D3z1WYvCZEuczNuqv8RzxpNMWxDtvBpvNdlB0jZ5SV1nP83V4K7tg4+rf3tQor5icxHfsFwolCnux/d4jbLIpHfuLSR+aQYiA4D2ThnJPay06I5XFaa0BEeErTQJ9QaDIpa8=
第三层:采用国密4对第二层加密后的数据进行加密,加密方式采用sm4中的ECB加密模式。
代码截图:
Sm4加密的密钥:11HDESaAhiHHugDz
Sm4加密后的密文:sI1FGgmILLvO1PKkl1vdp0cKMU/TEzHKjbgR0zTXc1yQHJ5baygGrm3mhNkQzo4T5iQ3u5Mt1DFB4Dc4/y7hgGaX4Z7o5qnP8E2Ndfrhxv5DzGiXjFWggjiE2/xczAL3bz/Py5SHAPKhy1XZsnc5Bbk0PyP39gdmBAP2nhrZNq4/iJoB1euU/Ou4fdLAT2jk3ggaIQA/SFWFplx16dMK0peSGyV9oG4UPhtFmKd0Qz4=
前端加密的总体流程代码:
2、后端解密
第一层:前端加密传输过来的数据进行SM4中对应ECB模式的解密
SM4密钥:11HDESaAhiHHugDz
SM4解密后的密文:OG7UuV/Z4XezcckB8HmtVudvRHUG1nK05ARFX40D3z1WYvCZEuczNuqv8RzxpNMWxDtvBpvNdlB0jZ5SV1nP83V4K7tg4+rf3tQor5icxHfsFwolCnux/d4jbLIpHfuLSR+aQYiA4D2ThnJPay06I5XFaa0BEeErTQJ9QaDIpa8=
SM4中对应ECB模式的解密代码:
第二层:RSA根据私钥对第一层解密后的数据进行解密
RSA私钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAnXPulvJauLsulRIiUJM0KvgFirtdF1k+VkZ8zxXkAE0DyJaY+4XwKx+mXKC9jvjvf+Sbez/yFUZigs/vPW6SqEWgemsjVl97Dk02mdrYxc0YV6fWH/7otPZ/p0BIJsWdDK/UdVXbSyy7myGxsINM+LlgflN322dmSJOUGCtWbwIDAQAB
RSA解密后的密文:11112222#821f3157e1a3456bfe1a000a1adf0862
RSA根据私钥进行解密的代码截图:
第三层:以#分割{明文#md5(明文)} ,采用md5加密明文,与前端md5(明文)数据进行对比,根据对比结果,给出相应的提示,
后端解密总体流程图:
本文只是给出了解决方法,具体解决代码自行百度。