同时兼容JS和c#的RSA加密解密算法详解(对web提交的数据加密传输)

  

  

我们在网络应用中往往涉及到敏感的数据,由于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

  

同时兼容JS和c#的RSA加密解密算法详解(对web提交的数据加密传输)

  

此命令在openssl.exe同目录下生成openssl_rsa_private_key.pem文件。

  

,2)生成公钥rsa ——openssl_rsa__private。pem -pubout治疗openssl_rsa__public.pem

  

同时兼容JS和c#的RSA加密解密算法详解(对web提交的数据加密传输)

  

,以上命令会创建如下的文件:

  

同时兼容JS和c#的RSA加密解密算法详解(对web提交的数据加密传输)

  

这个文件可以用文本编辑器进行打开,查看内容。

        ——开始公钥   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提交的数据加密传输)