<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    linugb118--java space

    Java

    2014年5月9日 #

    Javascript端加密java服務端解密

                                       Javascript端加密java服務端解密

     

    通常我們會通過htts來保證傳輸安全,但如果我們不用https,如何通過javascript來保證瀏覽器端發送的參數進行加密,并且通過RSA算法來處理。

     

    這里我們可以利用jquery的一個加密插件jcryption來處理,可以參考

    http://jcryption.org/#examples

    現在版本是3.0 但是沒有java端的實現,下次有時間再研究。現在這個用的是1.1的版本

    這個可以在

    http://linkwithweb.googlecode.com/svn/trunk/Utilities/jCryptionTutorial 獲取

     

    不過他的服務端有個缺陷我修改了。

    接來大致介紹如下:

     

    1.     首先服務端有產生publicKeyservlet

    package com.gsh.oauth.auth.servlet;

     

    import java.io.IOException;

    import java.security.KeyPair;

     

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    import com.gsh.oauth.auth.util.JCryptionUtil;

     

    /**

     * Servlet implementation class EncryptionServlet

     */

    public class EncryptionServlet extends HttpServlet {

           private static final long serialVersionUID = 1L;

     

           /**

            * Default constructor.

            */

           public EncryptionServlet() {

                   // TODO Auto-generated constructor stub

           }

     

           /**

            * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)

            */

           protected void service(HttpServletRequest request,

                          HttpServletResponse response) throws ServletException, IOException {

                   int KEY_SIZE = 1024;

                   if (request.getParameter("generateKeypair") != null) {

     

                          JCryptionUtil jCryptionUtil = new JCryptionUtil();

     

                          KeyPair keys = null;

                          //if (request.getSession().getAttribute("keys") == null) { //這里注釋掉 否則第二次請求會500

                                 keys = jCryptionUtil.generateKeypair(KEY_SIZE);

                                 request.getSession().setAttribute("keys", keys);

                          //}

     

                          StringBuffer output = new StringBuffer();

     

                          String e = JCryptionUtil.getPublicKeyExponent(keys);

                          String n = JCryptionUtil.getPublicKeyModulus(keys);

                          String md = String.valueOf(JCryptionUtil.getMaxDigits(KEY_SIZE));

     

                          output.append("{\"e\":\"");

                          output.append(e);/Files/linugb118/bcprov-jdk15-1.46.jar.zip

                          output.append("\",\"n\":\"");

                          output.append(n);

                          output.append("\",\"maxdigits\":\"");

                          output.append(md);

                          output.append("\"}");

     

                          output.toString();

                          response.getOutputStream().print(

                                        output.toString().replaceAll("\r", "").replaceAll("\n", "")

                                                       .trim());

                   } else {

                          response.getOutputStream().print(String.valueOf(false));

                   }

           }

     

    }

     

    2. Client例子

    <html>

    <head>

    <title>Login form</title>

    </head>

    <meta http-equiv="Content-Type"

        content="text/html; charset=utf-8">

     

    <script src="../js/jquery-1.4.2.min.js" type="text/javascript"></script>

    <script src="../js/jquery-ui-1.8.2.custom.min.js"

        type="text/javascript"></script>

    <script type="text/javascript"

        src="../js/security/jquery.jcryption-1.1.min.js"></script>   

       

    <script type="text/javascript">

        $(document).ready(function() {

            var $statusText = $('<span id="status"></span>').hide();

            $("#status_container").append($statusText);

            $("#lf").jCryption({

                getKeysURL:"/gsh/oauth/encryption?generateKeypair=true",

                                            beforeEncryption : function() {

                                                $statusText

                                                       .text("Test Code")

                                                       .show();

                                                return true;

                                            },

                                            encryptionFinished : function(

                                                   encryptedString,

                                                   objectLength) {

                                                $statusText

                                                       .text(encryptedString);

                                                return true;

                                            }

                                        });

                      });

    </script>

    <body>

     

    <form id="lf" action="/gsh/oauth/authorization"

        method="post">

    <fieldset><legend>login</legend>

    <div>

    <div>client_id:<br>

    <input type="text" size="45" name="client_id" value=""></div>

    <div>redirect_uri:<br>

    <input type="text" size="45" name="redirect_uri" value=""></div>

    </div>

    <div>loginid:<br>

    <input type="text" size="45" name="loginid" value=""></div>

    </div>

    <div>password:<br>

    <input type="password" size="45" name="password" value=""></div>

    </div>

    <div>

    <p><input type="submit" /><span id="status_container"></span></p>

    </div>

    </fieldset>

    </form>

    </body>

    </html>

     

    上面看代碼可以看出 他通過/gsh/oauth/encryption?generateKeypair=true來先請求獲取public 然后通過jcryption進行加密 然后post到服務端。Encryption就是上面的EncryptionServlet

    通過瀏覽器工具可以看到表單里面的數據加密為

     

    jCryption=95f1589502288050e08b4bd8b1a360341cf616d9054531b85a6ef85783c1723b46686ec454ee81f1304fa2370ce24c4d9c06f84d47aa4bdf99310ae12b514db19bfcc325f3a39a584c23b1546550f4e0635c12486f2fd84dec137e1c61cfa775dfa3057a1f0154712aaba0af0cc61810282780f15bed909c24a184e66ab39f2e

    3. 目標servletauthorization)的解密

     

    public class Authorization extends HttpServlet {

     

        protected void doGet(HttpServletRequest httpServletRequest,

               HttpServletResponse httpServletResponse) throws ServletException,

               IOException {

          

    PrintWriter out = httpServletResponse.getWriter();

           

            KeyPair keys = (KeyPair) httpServletRequest.getSession().getAttribute("keys");

            String encrypted = httpServletRequest.getParameter("epCryption");

           

            String client_id = null;

        String redirect_uri = null;

        String loginid = null;

        String password = null;

     

           try {

                   String data = JCryptionUtil.decrypt(encrypted, keys);

                   httpServletRequest.getSession().removeAttribute("keys");

                   Map params = JCryptionUtil.parse(data, "UTF-8");

                   client_id = (String) params.get("client_id");

                   redirect_uri = (String) params.get("redirect_uri");

                   loginid = (String) params.get("loginid");

                   password = (String) params.get("password");

     

               } catch (Throwable e) {

                   e.printStackTrace();

               }

    }

     

        }

     

    上面至少片段,需要相關的jsjava問題,請在svn上面獲取。另外還需要bcprov-jdk15-1.46.jar

    可以在http://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15/1.46

    獲取。

     

     

     

     

    posted @ 2014-05-09 10:07 linugb118 閱讀(4211) | 評論 (1)編輯 收藏

    My Links

    Blog Stats

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 1a级毛片免费观看| 亚洲第一网站男人都懂| 亚洲日韩精品一区二区三区无码| 亚洲欧洲无码AV电影在线观看| 日韩在线观看视频免费| 亚洲午夜av影院| 丝瓜app免费下载网址进入ios| 久久亚洲AV无码西西人体| 青柠影视在线观看免费高清| 久久久久久亚洲精品| 日韩精品人妻系列无码专区免费 | 国产亚洲真人做受在线观看| a在线观看免费网址大全| 亚洲精品在线观看视频| 国产亚洲欧美在线观看| 亚洲av区一区二区三| 韩日电影在线播放免费版| 亚洲AV无码专区在线播放中文| 99视频在线精品免费| 亚洲综合欧美色五月俺也去| 国产亚洲精品免费| 久久久WWW免费人成精品| 亚洲综合精品一二三区在线| 免费毛片a在线观看67194| 亚洲AV色欲色欲WWW| 日韩在线播放全免费| 亚洲va无码手机在线电影| 最近中文字幕电影大全免费版| 亚洲日韩中文字幕日韩在线| 精品亚洲永久免费精品| 亚洲综合偷自成人网第页色| 亚洲成人高清在线| 99在线视频免费| 色一情一乱一伦一视频免费看| 国产AV无码专区亚洲精品| 成人免费a级毛片| 成人A毛片免费观看网站| 亚洲国产激情在线一区| 亚洲综合激情另类专区| 成人免费观看一区二区| 亚洲最大免费视频网|