此功能由於前后台交互的設計比較繁瑣,所以此功能最好是一個人開發;在開發過程中所遇到的難點為:
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(明文)數據進行對比,根據對比結果,給出相應的提示,
后端解密總體流程圖:
本文只是給出了解決方法,具體解決代碼自行百度。