我们常常看到类似新浪上面的视频播放页面源文件是一堆乱码,实际上是经过JScript加密过的代码,这样可以防止普通用户轻易的找到视频源文件地址,从而盗链,下面把JScript加密解密的方法整理了一下:


申明:下面代码非本人原创,而是经过收集和整理的结果,由于原作者不祥,在此特说明。

JScript.encode实现加密解密的脚本代码如下:

< script language = " JavaScript " >
<!--
function screncode ( s , l )
{ enc = new ActiveXObject ( " Scripting.Encoder " ) ;
return enc . EncodeScriptFile ( " . " + l , s , 0 , l + " cript " ) ;
}
 
var STATE_COPY_INPUT = 100
var STATE_READLEN = 101
var STATE_DECODE = 102
var STATE_UNESCAPE = 103
 
var pick_encoding = new Array (
1 , 2 , 0 , 1 , 2 , 0 , 2 , 0 , 0 , 2 , 0 , 2 , 1 , 0 , 2 , 0 ,
1 , 0 , 2 , 0 , 1 , 1 , 2 , 0 , 0 , 2 , 1 , 0 , 2 , 0 , 0 , 2 ,
1 , 1 , 0 , 2 , 0 , 2 , 0 , 1 , 0 , 1 , 1 , 2 , 0 , 1 , 0 , 2 ,
1 , 0 , 2 , 0 , 1 , 1 , 2 , 0 , 0 , 1 , 1 , 2 , 0 , 1 , 0 , 2
)
 
var rawData = new Array (
0 x64 , 0 x37 , 0 x69 , 0 x50 , 0 x7E , 0 x2C , 0 x22 , 0 x5A , 0 x65 , 0 x4A , 0 x45 , 0 x72 ,
0 x61 , 0 x3A , 0 x5B , 0 x5E , 0 x79 , 0 x66 , 0 x5D , 0 x59 , 0 x75 , 0 x5B , 0 x27 , 0 x4C ,
0 x42 , 0 x76 , 0 x45 , 0 x60 , 0 x63 , 0 x76 , 0 x23 , 0 x62 , 0 x2A , 0 x65 , 0 x4D , 0 x43 ,
0 x5F , 0 x51 , 0 x33 , 0 x7E , 0 x53 , 0 x42 , 0 x4F , 0 x52 , 0 x20 , 0 x52 , 0 x20 , 0 x63 ,
0 x7A , 0 x26 , 0 x4A , 0 x21 , 0 x54 , 0 x5A , 0 x46 , 0 x71 , 0 x38 , 0 x20 , 0 x2B , 0 x79 ,
0 x26 , 0 x66 , 0 x32 , 0 x63 , 0 x2A , 0 x57 , 0 x2A , 0 x58 , 0 x6C , 0 x76 , 0 x7F , 0 x2B ,
0 x47 , 0 x7B , 0 x46 , 0 x25 , 0 x30 , 0 x52 , 0 x2C , 0 x31 , 0 x4F , 0 x29 , 0 x6C , 0 x3D ,
0 x69 , 0 x49 , 0 x70 , 0 x3F , 0 x3F , 0 x3F , 0 x27 , 0 x78 , 0 x7B , 0 x3F , 0 x3F , 0 x3F ,
0 x67 , 0 x5F , 0 x51 , 0 x3F , 0 x3F , 0 x3F , 0 x62 , 0 x29 , 0 x7A , 0 x41 , 0 x24 , 0 x7E ,
0 x5A , 0 x2F , 0 x3B , 0 x66 , 0 x39 , 0 x47 , 0 x32 , 0 x33 , 0 x41 , 0 x73 , 0 x6F , 0 x77 ,
0 x4D , 0 x21 , 0 x56 , 0 x43 , 0 x75 , 0 x5F , 0 x71 , 0 x28 , 0 x26 , 0 x39 , 0 x42 , 0 x78 ,
0 x7C , 0 x46 , 0 x6E , 0 x53 , 0 x4A , 0 x64 , 0 x48 , 0 x5C , 0 x74 , 0 x31 , 0 x48 , 0 x67 ,
0 x72 , 0 x36 , 0 x7D , 0 x6E , 0 x4B , 0 x68 , 0 x70 , 0 x7D , 0 x35 , 0 x49 , 0 x5D , 0 x22 ,
0 x3F , 0 x6A , 0 x55 , 0 x4B , 0 x50 , 0 x3A , 0 x6A , 0 x69 , 0 x60 , 0 x2E , 0 x23 , 0 x6A ,
0 x7F , 0 x09 , 0 x71 , 0 x28 , 0 x70 , 0 x6F , 0 x35 , 0 x65 , 0 x49 , 0 x7D , 0 x74 , 0 x5C ,
0 x24 , 0 x2C , 0 x5D , 0 x2D , 0 x77 , 0 x27 , 0 x54 , 0 x44 , 0 x59 , 0 x37 , 0 x3F , 0 x25 ,
0 x7B , 0 x6D , 0 x7C , 0 x3D , 0 x7C , 0 x23 , 0 x6C , 0 x43 , 0 x6D , 0 x34 , 0 x38 , 0 x28 ,
0 x6D , 0 x5E , 0 x31 , 0 x4E , 0 x5B , 0 x39 , 0 x2B , 0 x6E , 0 x7F , 0 x30 , 0 x57 , 0 x36 ,
0 x6F , 0 x4C , 0 x54 , 0 x74 , 0 x34 , 0 x34 , 0 x6B , 0 x72 , 0 x62 , 0 x4C , 0 x25 , 0 x4E ,
0 x33 , 0 x56 , 0 x30 , 0 x56 , 0 x73 , 0 x5E , 0 x3A , 0 x68 , 0 x73 , 0 x78 , 0 x55 , 0 x09 ,
0 x57 , 0 x47 , 0 x4B , 0 x77 , 0 x32 , 0 x61 , 0 x3B , 0 x35 , 0 x24 , 0 x44 , 0 x2E , 0 x4D ,
0 x2F , 0 x64 , 0 x6B , 0 x59 , 0 x4F , 0 x44 , 0 x45 , 0 x3B , 0 x21 , 0 x5C , 0 x2D , 0 x37 ,
0 x68 , 0 x41 , 0 x53 , 0 x36 , 0 x61 , 0 x58 , 0 x58 , 0 x7A , 0 x48 , 0 x79 , 0 x22 , 0 x2E ,
0 x09 , 0 x60 , 0 x50 , 0 x75 , 0 x6B , 0 x2D , 0 x38 , 0 x4E , 0 x29 , 0 x55 , 0 x3D , 0 x3F
)
 
var transformed = new Array ()
for ( var i = 0 ; i < 3 ; i ++ ) transformed [ i ] = new Array ()
for ( var i = 31 ; i <= 126 ; i ++ ) for ( var j = 0 ; j < 3 ; j ++ ) transformed [ j ][ rawData [( i - 31 ) * 3 + j ]] = ( i == 31 ) ? 9 : i
 
var digits = new Array ()
for ( var i = 0 ; i < 26 ; i ++ )
{
digits [ " A " . charCodeAt ( 0 ) + i ] = i
digits [ " a " . charCodeAt ( 0 ) + i ] = i + 26
}
for ( var i = 0 ; i < 10 ; i ++ ) digits [ " 0 " . charCodeAt ( 0 ) + i ] = i + 52
digits [ 0 x2b ] = 62
digits [ 0 x2f ] = 63
 
function unescape ( char )
{
var escapes = " #&!*$ "
var escaped = " /r/n <>@ "
 
if ( char . charCodeAt ( 0 ) > 126 ) return char
if ( escapes . indexOf ( char ) != - 1 ) return escaped . substr ( escapes . indexOf ( char ) , 1 )
return " ? "
}
 
function decodeBase64 ( string )
{
var val = 0
val += ( digits [ string . substr ( 0 , 1 ) . charCodeAt ( 0 )] << 2 )
val += ( digits [ string . substr ( 1 , 1 ) . charCodeAt ( 0 )] >> 4 )
val += ( digits [ string . substr ( 1 , 1 ) . charCodeAt ( 0 )] & 0 xf ) << 12
val += (( digits [ string . substr ( 2 , 1 ) . charCodeAt ( 0 )] >> 2 ) << 8 )
val += (( digits [ string . substr ( 2 , 1 ) . charCodeAt ( 0 )] & 0 x3 ) << 22 )
val += ( digits [ string . substr ( 3 , 1 ) . charCodeAt ( 0 )] << 16 )
return val
}
 
function strdec ( encodingString )
{
 
var marker = " #@~^ "
var stringIndex = 0
var scriptIndex = - 1
var unEncodingIndex = 0
var char = null
var encodingLength = unEncodinglength = 0
var state = STATE_COPY_INPUT
var unEncodingString = ""
var re , arr
 
while ( state )
{
switch ( state )
{
case ( STATE_COPY_INPUT ) :
scriptIndex = encodingString . indexOf ( marker , stringIndex )
if ( scriptIndex != - 1 )
{
unEncodingString += encodingString . substring ( stringIndex , scriptIndex )
scriptIndex += marker . length
state = STATE_READLEN
}
else
{
stringIndex = stringIndex == 0 ? 0 : stringIndex
unEncodingString += encodingString . substr ( stringIndex , encodingString . length )
state = 0
}
break
 
case ( STATE_READLEN ) :
encodingLength = encodingString . substr ( scriptIndex , 6 )
unEncodinglength = decodeBase64 ( encodingLength )
scriptIndex += ( 6 + " == " . length )
state = STATE_DECODE
break
 
case ( STATE_DECODE ) :
if ( ! unEncodinglength )
{
stringIndex = scriptIndex + " DQgAAA==^#~@ " . length
unEncodingIndex = 0
state = STATE_COPY_INPUT
break
}
char = encodingString . substr ( scriptIndex , 1 )
if ( char == " @ " ) state = STATE_UNESCAPE
else
{
if ( char . charCodeAt ( 0 ) < 0 xFF )
{
unEncodingString += String . fromCharCode ( transformed [ pick_encoding [ unEncodingIndex % 64 ]][ char . charCodeAt ( 0 )])
unEncodingIndex ++
}
else
{
unEncodingString += char
}
scriptIndex ++
unEncodinglength --
break
}
 
case STATE_UNESCAPE :
unEncodingString += unescape ( encodingString . substr ( ++ scriptIndex , 1 ))
scriptIndex ++; unEncodinglength -= 2
unEncodingIndex ++
state = STATE_DECODE
break
}
}
 
re = new RegExp ( " (JScript|VBscript).encode " , " gmi " )
while ( arr = re . exec ( unEncodingString )) unEncodingString = RegExp . leftContext + RegExp .$ 1 + RegExp . rightContext
return unEncodingString
}
 
//-->
<
/ script>

上面代码的使用方法如下:
1、建一个.htm的文件,加入上面的代码。
2、再后面写上:

< form name = " form " >
< TEXTAREA NAME = " code " ROWS = " 20 " COLS = " 40 " onfocus = this . select () > 在这里写入你要加密或解密的内容。 </ TEXTAREA >< BR >
< INPUT TYPE = " button " value = " /JScript.encode加密 " onclick = " this.form.code.value= " / screncode ( this . form . code . value , " 'JS') " >
< INPUT TYPE = " button " value = " /JScript.encode解密 " onclick = " this.form.code.value= " / strdec ( this . form . code . value ) "" >
</ form >

3、保存该文件,用浏览器打开就可以进行加密和解密了。

下面有一个我做好的在线可以直接使用的页面,大家可以直接访问进行加密解密:
http://www.toplee.com/blog/wp-content/pages/jsencode.html