1. 程式人生 > >java中解析js中由escape加密過的資料(個人總結)

java中解析js中由escape加密過的資料(個人總結)

escape和unescape是javascript中的方法,Java中無法直接通過java的方法來解密加密後的資料。

解決辦法:將js中escape和unescape方法抽取出來當作java的工具包。

package com.util;

public class EscapeUnescape {
    /**
     * 對應javascript的unescape()函式, 可對javascript的escape()進行解碼
     * 方法名 : escape  
     * @param src  
     * @return String DOM物件
     */
    public static String escape(String src) {
        int i;
        char j;
        StringBuffer tmp = new StringBuffer();
        tmp.ensureCapacity(src.length() * 6);
        for (i = 0; i < src.length(); i++) {
            j = src.charAt(i);
            if (Character.isDigit(j) || Character.isLowerCase(j)
                    || Character.isUpperCase(j))
                tmp.append(j);
            else if (j < 256) {
                tmp.append("%");
                if (j < 16)
                    tmp.append("0");
                tmp.append(Integer.toString(j, 16));
            } else {
                tmp.append("%u");
                tmp.append(Integer.toString(j, 16));
            }
        }
        return tmp.toString();
    }

    /*
     * 對應javascript的unescape()函式, 可對javascript的escape()進行解碼
     */
    public static String unescape(String src) {
        StringBuffer tmp = new StringBuffer();
        tmp.ensureCapacity(src.length());
        int lastPos = 0, pos = 0;
        char ch;
        while (lastPos < src.length()) {
            pos = src.indexOf("%", lastPos);
            if (pos == lastPos) {
                if (src.charAt(pos + 1) == 'u') {
                    ch = (char) Integer.parseInt(
                            src.substring(pos + 2, pos + 6), 16);
                    tmp.append(ch);
                    lastPos = pos + 6;
                } else {
                    ch = (char) Integer.parseInt(
                            src.substring(pos + 1, pos + 3), 16);
                    tmp.append(ch);
                    lastPos = pos + 3;
                }
            } else {
                if (pos == -1) {
                    tmp.append(src.substring(lastPos));
                    lastPos = src.length();
                } else {
                    tmp.append(src.substring(lastPos, pos));
                    lastPos = pos;
                }
            }
        }
        return tmp.toString();
    }
}

如此java和js就互相通用了!

相關推薦

java解析jsescape加密資料(個人總結)

escape和unescape是javascript中的方法,Java中無法直接通過java的方法來解密加密後的資料。 解決辦法:將js中escape和unescape方法抽取出來當作java的工具包。 package com.util; public class Esca

句句解析js的完美 / 緩衝運動框架(新手專用)

1.完美運動框架對於初學者來說,還是非常必要的,所以要好好分析。 2. 基礎牢固者,儘量就不要看註釋了,鞏固複習舊知識! //js完美運動框架 //函式(物件,{style1:目標值1, style2:目標值2}, 運動時間, 結束運動後的函式) function startMove

詳細解析js的混合方式構造物件(構造加屬性,原型加方法)

詳細解析混合方式構造物件 js程式碼如下 function CreatePerson(name, qq) //用建構函式加屬性 { //原料 +new 系統偷偷替咱們做 //var obj=ne

全面解析js的for迴圈

JavaScript誕生已經有20多年了,我們一直使用的用來迴圈一個數組的方法是這樣的:for(var index=0;index<myArray.length;index++) {  console.log(myArray[index]);}自從JavaScript5起,我們開始可以使用內建的forE

解析js的深拷貝和淺拷貝

js中的淺拷貝和深拷貝,只是針對複雜資料型別(Objcet,Array)的複製問題。簡單來講淺拷貝和深拷貝都可以實現在原有物件的基礎上再生成一份的作用。但是根據新生成的物件能否影響到原物件可以分為淺拷貝和深拷貝。 概念1:淺拷貝 淺拷貝就是指拷貝引用,新生成的引用和原來的引

解析js的原型鏈和在原型鏈物件屬性查詢

//原型鏈中屬性的查詢 function Person(name,color){ this.name=name; this.color=color; } function Teacher(name,age){ this.name=name; this.age=age;

Python Web 9 —— flaskjs如何解析render_template傳遞給html的資料

現象說明:         在flask中通常在使用render_template渲染一個.html頁面檔案時,可以傳入一下引數,在html原始碼中通過{{變數名}}的方式來呼叫資料,但是假如在htm

解析js的鍵值對 及 陣列的定義 及檢測陣列是否有重複的資料

要解析的資料 var obj = {       "contractName":"合同","contractType":"合同型別","invoiceDate":"付款時間","amount":"付款銀行",       "taxAmount":"付款金額","paymen

Java之路--js定時任務之輪詢

最近在專案裡做了非常簡單的審批流程,根據領導要求 需要定時檢查 登入使用者是否 有表單需要去審批 ,一開始以為用spring  task定時任務排程可能更易於實現,一上手發現,task定時後臺任務,比如清理快取,清理日誌等更為方便好用,而前臺頁面的定時任務,用js的定時器se

ASP.NET MVC使用JS實現不對稱加密密碼傳輸

摘要:ASP.NET MVC中登入頁面中點選登入後,使用者名稱、密碼將被明文傳輸到Controller中,使用Fiddler等工具可以輕鬆截獲並獲取密碼, 這是不安全的。 使用對稱加密,如AES,金鑰將被暴露前端程式碼,也是不安全的。使用不對稱加密能夠較好解決這個問題。本文

深入解析js基本資料型別與引用型別,函式引數傳遞的區別

ECMAScript的資料有兩種型別:基本型別值和引用型別值,基本型別指的是簡單的資料段,引用型別指的是可能由多個值構成的物件。 Undefined、Null、Boolean、Number和String是值型別,其他都是引用型別。其他語言String是

html使用js進行登入md5加密提交併重定向新頁面

       在web開發中有時需要將使用者的一些資訊在客戶端加密後進行提交,然後在web後端進行驗證,可以提高頁面傳輸過程中的安全性。本例實現一個簡單的加密登入demo,例子僅僅為了演示使用,實際使用時可以根據實際要求進行修改。 1、主要實現點 1、form中加入一個隱

tomcat解析url的引數或者post的請求內容

package javax.servlet.http; import javax.servlet.ServletInputStream; import java.util.Hashtable; import java.util.ResourceBundle; im

Java端和JS端的AES加密解密同步

Java端和JS端的AES加密演算法同步 公司要求登入時使用者名稱和密碼必須先加密,再將資料傳送到伺服器。由於這種加密必須要求是可逆的,所以不能用MD5來加密,MD5不是可逆的。後臺選擇了用AES加密。然後問題就是如何跟公司的Java演算法得到同樣的結果。

iOS開發解析JSON的boolean型別的資料遇到的問題

問題描述: Xcode中列印的JSON資料: {     content =     {         createTime = 1462512975497;         expir

Java資料介面編寫簡單例子,Java Json解析,服務端介面輸出Json資料,客戶端通過HTTP獲取介面Json資料

實現效果 實現原因 目前主流的CS結構,資料都是通過RESTful風格介面形式呈現,不管是桌面級應用程式還是手機端,介面是我們獲取資料的大多數選擇,主流資料介面呈現形式主要是Json和Xml,後者目前基本漸行漸遠。Json的輕量級和可讀型成為了大多數公司及個人

【開發筆記】Java和.Net實現JSescape()和unescape()

在做建行支付對接時,傳的引數中的漢字,需要用escape()編碼 但我是通過Java和.Net後臺直接請求,因此需要在後臺實現類似的功能 所以在此貼上程式碼 Java /** * 漢字編碼,實現js escape() * * @p

js變量base64加密傳輸

repl arc eat urn 密碼 ace color 舉例 rep 首先對base64進行定義:  var Base64 = { _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw

java執行js代碼

engine byname manage gin 執行 腳本 post get 對象 //#1、用scriptEngineManger ScriptEngineManager engine=new ScriptEngineManager(); //#2

js解析json時候的eval和$.parseJSON()的區別以及JSON.stringify()

對話 {} alert tle 用戶 sdn clas div 轉換成 1.第一個區別是:安全性 json格式非常受歡迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,這兩者之間有什麽區別呢? JSON.parse