我们在网络应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息。虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都是收费的),成本较高。那么问题来了,如果对Web提交的敏感数据进行加密呢?网络应用中,前端的数据处理和交互基本上都是靠javascript来完成,后台的逻辑处理可以c# (java)等进行处理。
微软的c#中虽然有RSA算法,但是格式和OpenSSL生成的公/私钥钥文件格式并不兼容。这个也给贯通前后台的RSA加密解密带来了难度。为了兼容OpenSSL生成的公/私钥钥文件格式,贯通javascript和c#的RSA加密解密算法,必须对c#内置的方法进行再度封装。
下面以登录为例,用户在密码框输入密码后,javascript发送ajax请求时,对密码先进行rsa加密后再发,送服务器接收到加密后的密码后,先对其进行解密,然后再验证登录是否成功。
,,1)打开openssl。exe文件,输入genrsa治疗openssl_rsa_priv。pem 1024
此命令在openssl.exe同目录下生成openssl_rsa_private_key.pem文件。
,2)生成公钥rsa ——openssl_rsa__private。pem -pubout治疗openssl_rsa__public.pem
,以上命令会创建如下的文件:
这个文件可以用文本编辑器进行打开,查看内容。
——开始公钥 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0w036ClSD0LvxPROMun0u022R OJlZE6P3m + gjq3gpi4n7lo8jhTqMqgccDbVJqnIfMzWS9O3lnlQXWTxJ3B4XJ52F AcriY5brOXUVgBLx5QMHLLd1gtJnmG4i7r4ytgX7XVKRnojR6zca1YnS0lbGGDF1 CGllB1riNrdksSQP + wIDAQAB - - - - - - - - - - -端公钥
- - - - - - - - - - -开始RSA私钥 MIICXQIBAAKBgQC0w036ClSD0LvxPROMun0u022ROJlZE6P3m + gjq3gpi4n7lo8j hTqMqgccDbVJqnIfMzWS9O3lnlQXWTxJ3B4XJ52FAcriY5brOXUVgBLx5QMHLLd1 gtJnmG4i7r4ytgX7XVKRnojR6zca1YnS0lbGGDF1CGllB1riNrdksSQP + wIDAQAB AoGAIOyl6lIxXKULZoBKbEqXfIz0GwxlGg1ywyn5mW2lAGQzKMken0ioBnD9xIVW rOlHyhkIvBCyuC0jgfE2Avn93MlB3j0WRuXMFlJpCBlEklMilO9Zgmwl + vTB3VZb 8 vzdreeeubio7lwp/KvSo + IFlNjDTKgAczbLTwAmj4w6g0ECQQDm4yxPdxcU2ywZ 7 pyjimm9qnsah9kcrju8gjeyhsupgtjhw1cx7peo + vRiHqxDy1yaSu1BlwRR52pC jKNnl0QhAkEAyGx3NxEIiLk2oXGGbIMZ4P6geC8gYu01BiRNWVf0Yi7 + sCH68eUP oI + G5bJ8bvzXpvHjQi0s2OlRfct/qtPQmwJBALa + 2 donbxdy4lui3lo/esk0QVaO aoTY3gomggnJkQRo4zzOABXkGaIF/6 gp3u9j5ug4rffd1m19xp2pk0zk1aecqbyi lJAKW4zuF7CA3z3AxOzqckKTwdnrJL4G6FwDsMPfONWvCw4IJE + xSk64BbIkTpTr hhPa9WcHba6c + P6e4h0CQQDWeGMMpkqPG/w4afNCGmvRnM8vNkGUAmDGvCsfkTID ijpKl5SD55hPHsWE5rsv1TLUpkWtrFBcg61bHwMUP3cv - - - - -端RSA私钥——
首先需要导入js包文件
& lt;脚本src=" https://www.yisu.com/zixun/dist/js/jsencrypt.js "祝辞& lt;/script>
var=new JSEncrypt加密(); var pubkey=" - - - - - - - - - - -开始公钥\ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAj0dPnBMf3Z4VT1B8Ee6bjKNs \ hlYj7xvGijAa8RCdmGR7mrtrExnk8mdUlwdcS05gc4SSFOyWJcYtKUHpWn8/pkS0 \ vgGOl9Bzn0Xt9hiqTb3pZAfykNrMDGZMgJgfD6KTnfzVUAOupvxjcGkcoj6/vV5I \ eMcx8mT/z3elfsDSjQIDAQAB \ - - - - - - - - - - -端公钥”; encrypt.setPublicKey (pubkey); var加密=encrypt.encrypt ($ (' # txtpwd ') .val ());//console.log(加密); . ajax({美元 类型:“文章”, url: http://localhost: 24830/服务/rsa_pem.ashx》 数据:{“pwd”:加密}, 数据类型:“Json”, 错误:函数(xhr、状态、错误){//警报(错误); $ (" # txtInfo”)。文本(“请求服务器失败!”); (美元)。文本(“登录”); (美元)。attr(“禁用”,假); }, 成功:函数(json) { 如果(uid==癮dmin”,,json.datahttps://www.yisu.com/zixun/==?00”) { 窗口。位置。href=" https://www.yisu.com/zixun/index.html "; } 其他{ $ (" # txtInfo”)。文本(“用户名或者密码错误!”); (美元)。文本(“登录”); (美元)。attr(“禁用”,假); } } });同时兼容JS和c#的RSA加密解密算法详解(对web提交的数据加密传输)