㈠ url參數加密
加密URL參數
插件在訪問 Web 程序時,可以使用 Get 方法或 Post 方法提交數據,無論是哪種方法,按照 HTTP 協議的規范,參數總是按照以下格式提交(每對參數名/參數值以「&」號分隔):
參數名1=參數值1&參數名2=參數值2&參數名3=參數值3...
如果您沒有使用SSL,所有的參數名和參數值都將以明文的形式通過網路傳輸到 Web 伺服器,顯然這種方式是很不安全的,為了保證插件與Web 程序的通訊安全,插件在提交參數前可以對每個參數值使用 Rijndael 加密演算法進行加密處理,並使用 Base64 編碼轉換為可讀字元串形式。
Rijndael 加密演算法是一種高效的對稱加密演算法,它是 AES(Advanced Encryption Standard,高級加密演算法標准)的實現,在加密和解密時有兩個基本參數:初始向量和密鑰,Web程序在進行解密時必須使用和插件端設置相同的初始向量和密鑰。
下面分別列出了加密和不加密的例子各一個:
a. 不加密:Username=test&Password=123456&ClientIP=192.168.0.200&CurrentTime=2005-07-06+23%3a51%3a29
b. 加密:Username=ZtlBwgvwkS5YV98N9cgO%2fw%3d%3d&Password=vBSchK4dJX7Z2zfUatu9ZQ%3d%3d&CurrentTime=mpNifqRIvBV2xZi3d%2fPli6%2bZwR9BKHs4y6t%2bNS2QIr4%3d
在 Web 程序端必須使用相同的演算法來解密各個參數值,具體如何實現取決與您所使用的 Web 程序語言,這就需要您找到特定語言的演算法實現。解密一個參數值的過程包括下面三個步驟:
1. 使用 Base64 演算法將參數值轉換為位元組數組;
2. 使用 Rijndael 演算法將 1 中得到的位元組數組解密得到另一位元組數組;
3. 將 2 中得到位元組數組用特定的字元集轉換成字元串,即得到原始的數據。
插件安裝目錄下的「GVODClassLib.dll」文件包含了加密和解密的演算法實現類 CryptoUtility,它的 Decrypt 方法可以直接將 Base64 編碼後的密文解密為原文字元串,如果您的 Web 程序使用的是 asp.net 編寫的,可以將該文件拷貝到您 Web 站點的「/bin」目錄下,然後按照下面的例子完成解密:
<%@ page language="C#" %>
<%@ import namespace="Com.GVOD" %>
<%
//定義密鑰,請改成你加密時使用的密鑰
string key = "OEtxF/yyALd2NflVW4KSMspQIozPkSRL+mEdvlBAzUQ=";
//定義初始向量,請改成你加密時使用的初始向量
string iv = "Cz3EXGTEMeIN8PXKFLiZWg==";
//定義密鑰長度,請改成你加密時使用的密鑰的長度
int keyLength = 256;
//生成 CryptoUtility 類的實例
CryptoUtility util = new CryptoUtility(key, iv, keyLength);
//解密用戶名
string username = util.Decrypt(Request["Username"]);
//解密密碼
string password = util.Decrypt(Request["Password"]);
//解密其它參數
...
%>
㈡ 如何在URL中傳遞加密的參數
方法一:採用正則表達式獲取地址欄參數:( 強烈推薦,既實用又方便!)加密參數在獲取到值後解密就可以了function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null) return unescape(r[2]); //解密 else return null;} // 調用方法alert(GetQueryString("參數名1"));alert(GetQueryString("參數名2"));alert(GetQueryString("參數名3")); 方法二:傳統方法function UrlSearch() { var name,value; var str=location.href; //取得整個地址欄 var num=str.indexOf("?"); str=str.substr(num+1); //取得所有參數stringvar.substr(start [, length ] var arr=str.split("&"); //各個參數放到數組里 for(var i=0;i 0){ name=arr[i].substring(0,num); value=arr[i].substr(num+1); this[name]=value; } } } //調用var Request=new UrlSearch(); //實例化alert(Request.id);
㈢ jquery中location.href方法。為什麼中文字元默認被加密了,格式是decode加密一樣
$.ajax的時候,把location.href用encodeURIComponent編碼一下。
㈣ 我的url裡面需要傳遞一個參數比如<a href="a.jspkk=<%=name%>" 怎麼加密
加密JS:---------------------------------------------------------------------
function encrypt(str, pwd)
{
//判斷密鑰是否為空
if(pwd == null || pwd.length <= 0)
{
alert("請輸入密鑰");
return null;
}
//得到密鑰的字元串的Unicode碼
var prand = "";
for(var i=0; i<pwd.length; i++)
{
prand += pwd.charCodeAt(i).toString();
//alert(prand);
}
var sPos = Math.floor(prand.length / 5);//返回小於等於其數值參數的最大整數
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));//返回從字元串轉換得到的整數. (charAt返回 String 對象的指定索引處的字元。)
var incr = Math.ceil(pwd.length / 2);//返回數的上限
var mo = Math.pow(2, 31) - 1;//返回基數表達式的指定次冪的值
if(mult < 2)
{
alert("您輸入的密鑰過於簡單或者是長度太短");
return null;
}
var salt = Math.round(Math.random() * 1000000000) % 100000000; //Math.round是四捨五入函數。 Math.random是返回一個偽隨機數(0到1之間的double型數)
prand += salt;
while(prand.length > 10)
{
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % mo;
var enc_chr = "";
var enc_str = "";
for(var i=0; i<str.length; i++)
{
enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / mo) * 255));
if(enc_chr < 16)
{
enc_str += "0" + enc_chr.toString(16);
}
else
enc_str += enc_chr.toString(16);
prand = (mult * prand + incr) % mo;
}
salt = salt.toString(16);
while(salt.length < 8)salt = "0" + salt;
enc_str += salt;
return enc_str;
}
解密JS:---------------------------------------------------------------------
function decrypt(str, pwd,stu)
{
if(str == null || str.length < 8)
{
alert("您輸入的內容過短,請重新輸入");
return;
}
if(pwd == null || pwd.length <= 0)
{
alert("請輸入密鑰");
return;
}
var prand = "";
for(var i=0; i<pwd.length; i++)
{
prand += pwd.charCodeAt(i).toString();
}
var sPos = Math.floor(prand.length / 5);
var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5));
var incr = Math.round(pwd.length / 2);
var mo = Math.pow(2, 31) - 1;
var salt = parseInt(str.substring(str.length - 8, str.length), 16);
str = str.substring(0, str.length - 8);
prand += salt;
while(prand.length > 10)
{
prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString();
}
prand = (mult * prand + incr) % mo;
var enc_chr = "";
var enc_str = "";
for(var i=0; i<str.length; i+=2)
{
enc_chr = parseInt(parseInt(str.substring(i, i+2), 16) ^ Math.floor((prand / mo) * 255));
//alert(enc_chr);
enc_str += String.fromCharCode(enc_chr);
//alert(enc_str);
prand = (mult * prand + incr) % mo;
}
return enc_str;
}
encrypt:加密方法。
str:你需要加密的字元串,pwd 密匙 返回的是一串加密的密文。
decrypt:解密方法。使用密匙+密文,得到原來解密的值
㈤ 怎麼在URL中傳遞加密的參數
方法一:採用正則表達式獲取地址欄參數:( 強烈推薦,既實用又方便!)加密參數在獲取到值後解密就可以了function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null) return unescape(r[2]); //解密 else return null;} // 調用方法alert(GetQueryString("參數名1"));alert(GetQueryString("參數名2"));alert(GetQueryString("參數名3")); 方法二:傳統方法function UrlSearch() { var name,value; var str=location.href; //取得整個地址欄 var num=str.indexOf("?"); str=str.substr(num+1); //取得所有參數stringvar.substr(start [, length ] var arr=str.split("&"); //各個參數放到數組里 for(var i=0;i 0){ name=arr[i].substring(0,num); value=arr[i].substr(num+1); this[name]=value; } } } //調用var Request=new UrlSearch(); //實例化alert(Request.id);
㈥ js如何獲取地址欄加密參數
方法一:採用正則表達式獲取地址欄參數:(強烈推薦,既實用又方便!)加密參數在獲取到值後解密就可以了
functionGetQueryString(name)
{
varreg=newRegExp("(^|&)"+name+"=([^&]*)(&|$)");
varr=window.location.search.substr(1).match(reg);
if(r!=null)
returnunescape(r[2]);//解密
else
returnnull;
}
//調用方法
alert(GetQueryString("參數名1"));
alert(GetQueryString("參數名2"));
alert(GetQueryString("參數名3"));
方法二:傳統方法
functionUrlSearch(){
varname,value;
varstr=location.href;//取得整個地址欄
varnum=str.indexOf("?");
str=str.substr(num+1);//取得所有參數stringvar.substr(start[,length]
vararr=str.split("&");//各個參數放到數組里
for(vari=0;i<arr.length;i++){
num=arr[i].indexOf("=");
if(num>0){
name=arr[i].substring(0,num);
value=arr[i].substr(num+1);
this[name]=value;
}
}
}
//調用
varRequest=newUrlSearch();//實例化
alert(Request.id);
㈦ javaScript:如何實現超鏈接調用JS函數處理URL後再跳轉呢
<a href="aaa.html?id=123" onclick="return LinkChange(this);">鏈接</a>
<script>
function LinkChange(v){
var url = v.href; //得到鏈接的href
var value = url.split('?'); //按?號分隔
if(value.length>1){ //如果URL里有參數
var newUrl = value[0] + "?" + value[1] + "456"; //在這里加密你的Url參數,然後拼接
window.open(newUrl,"_self");
}
return false;
}
</script>
㈧ 怎麼在URL中傳遞加密的參數
方法一:採用正則表達式獲取地址欄參數:( 強烈推薦,既實用又方便!)加密參數在獲取到值後解密就可以了function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null) return unescape(r[2]); //解密 else return null;} // 調用方法alert(GetQueryString("參數名1"));alert(GetQueryString("參數名2"));alert(GetQueryString("參數名3"));
方法二:傳統方法function UrlSearch() { var name,value; var str=location.href; //取得整個地址欄 var num=str.indexOf("?"); str=str.substr(num+1); //取得所有參數stringvar.substr(start [, length ] var arr=str.split("&"); //各個參數放到數組里 for(var i=0;i 0){ name=arr[i].substring(0,num); value=arr[i].substr(num+1); this[name]=value; } } } //調用var Request=new UrlSearch(); //實例化alert(Request.id);
㈨ php url參數加密
加密:$str = base64_encode("123");
解密:base64_decode($str);
㈩ 怎麼用js來加密url的傳遞參數
js對文字進行編碼涉及3個函數:escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent
1.傳遞參數時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字元截斷。
例如:<script language="javascript">document.write('<a href="http://passport..com/?logout&aid=7&u='+encodeURIComponent("http://cang..com/bruce42")+'">退出</a>');</script>
2.進行url跳轉時可以整體使用encodeURI
例如:Location.href=encodeURI("http://cang..com/do/s?word=網路&ct=21");
3. js使用數據時可以使用escape
例如:搜藏中history紀錄。
4.escape對0-255以外的unicode值進行編碼時輸出%u****格式,其它情況下escape,encodeURI,encodeURIComponent編碼結果相同。