使用JScript.encode进行网页的加密与解密

我们常常看到类似新浪上面的视频播放页面源文件是一堆乱码,实际上是经过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(
0x64,0x37,0x69, 0x50,0x7E,0x2C, 0x22,0x5A,0x65, 0x4A,0x45,0x72,
0x61,0x3A,0x5B, 0x5E,0x79,0x66, 0x5D,0x59,0x75, 0x5B,0x27,0x4C,
0x42,0x76,0x45, 0x60,0x63,0x76, 0x23,0x62,0x2A, 0x65,0x4D,0x43,
0x5F,0x51,0x33, 0x7E,0x53,0x42, 0x4F,0x52,0x20, 0x52,0x20,0x63,
0x7A,0x26,0x4A, 0x21,0x54,0x5A, 0x46,0x71,0x38, 0x20,0x2B,0x79,
0x26,0x66,0x32, 0x63,0x2A,0x57, 0x2A,0x58,0x6C, 0x76,0x7F,0x2B,
0x47,0x7B,0x46, 0x25,0x30,0x52, 0x2C,0x31,0x4F, 0x29,0x6C,0x3D,
0x69,0x49,0x70, 0x3F,0x3F,0x3F, 0x27,0x78,0x7B, 0x3F,0x3F,0x3F,
0x67,0x5F,0x51, 0x3F,0x3F,0x3F, 0x62,0x29,0x7A, 0x41,0x24,0x7E,
0x5A,0x2F,0x3B, 0x66,0x39,0x47, 0x32,0x33,0x41, 0x73,0x6F,0x77,
0x4D,0x21,0x56, 0x43,0x75,0x5F, 0x71,0x28,0x26, 0x39,0x42,0x78,
0x7C,0x46,0x6E, 0x53,0x4A,0x64, 0x48,0x5C,0x74, 0x31,0x48,0x67,
0x72,0x36,0x7D, 0x6E,0x4B,0x68, 0x70,0x7D,0x35, 0x49,0x5D,0x22,
0x3F,0x6A,0x55, 0x4B,0x50,0x3A, 0x6A,0x69,0x60, 0x2E,0x23,0x6A,
0x7F,0x09,0x71, 0x28,0x70,0x6F, 0x35,0x65,0x49, 0x7D,0x74,0x5C,
0x24,0x2C,0x5D, 0x2D,0x77,0x27, 0x54,0x44,0x59, 0x37,0x3F,0x25,
0x7B,0x6D,0x7C, 0x3D,0x7C,0x23, 0x6C,0x43,0x6D, 0x34,0x38,0x28,
0x6D,0x5E,0x31, 0x4E,0x5B,0x39, 0x2B,0x6E,0x7F, 0x30,0x57,0x36,
0x6F,0x4C,0x54, 0x74,0x34,0x34, 0x6B,0x72,0x62, 0x4C,0x25,0x4E,
0x33,0x56,0x30, 0x56,0x73,0x5E, 0x3A,0x68,0x73, 0x78,0x55,0x09,
0x57,0x47,0x4B, 0x77,0x32,0x61, 0x3B,0x35,0x24, 0x44,0x2E,0x4D,
0x2F,0x64,0x6B, 0x59,0x4F,0x44, 0x45,0x3B,0x21, 0x5C,0x2D,0x37,
0x68,0x41,0x53, 0x36,0x61,0x58, 0x58,0x7A,0x48, 0x79,0x22,0x2E,
0x09,0x60,0x50, 0x75,0x6B,0x2D, 0x38,0x4E,0x29, 0x55,0x3D,0x3F
)
 
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[0x2b] = 62
digits[0x2f] = 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)] & 0xf) << 12
val += ((digits[string.substr(2,1).charCodeAt(0)] >> 2) << 8)
val += ((digits[string.substr(2,1).charCodeAt(0)] & 0x3) << 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) < 0xFF)
{
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

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
8 Responses
  1. Pingback: Anonymous
  2. ngs says:

    不能加密

  3. hxp says:

    这段代码不能解全,请问有什么更好的办法呢?

  4. hxp says:

    #@~^SQUAAA==@#@&P~,P,Pq6PgGYvkd1!:n.bm`Mn;!+/DcEmm//GDOmbNE#*bP:tnU@#@&P~~,P~IdaWUk+cDbY~J@!w@*@!aPCsbox{^+Y+M@*´íÎó²Ù×÷£¡@!za@*r@#@&P~~,P~IdwKxdnc2x[@#@&P~P,~,2U9P&0@#@&P,2lT+xD;;nkYR$;+MX/D.rxT`rwConE*@#@&P,r0,wCL’JE~Dtnx,2mon{F@#@&P,k6~xKYckkx;hDk1cwmo+*b~Y4+ P2lLn{F@#@&,~k6P2CT+@!q~Dtnx,2mon{F@#@&P,wmL+{kUYvwCL#@#@&~Pk+Y,.d’k+M\nD ^M+CYG4N+^OvJl[G94 D^KD[k+DJ#@#@&,~k6P.+$EndD`J1C//WMOmk9J*’EJ~O4+U@#@&~Pk;sxr/+sn1Y~e,WMWh,\x/4Wammm/nPKD[nMP4H~mm/+|r[PG2UZE@#@&~,+s/@#@&,P-n /tG2|mC/dKDO{k Y`M+$;+kYcJ1ldnkWDDmk9J#*@#@&P,/$VxJdn^+^Y,MP6DGh,\+Ud4W2{1Ck+~StD+,\U/4W2{1ldnkWDDxJL\+ d4Wa{1ld+dGMY’J,GD9+.~(XP^Ck+mk9~G2j;J@#@&P,+ [Pb0@#@&,P.dcWwUPk;VB^Gx ~2~f@#@&~,kWPMdRWW~Dt+U@#@&P~P,~,DnkwKx/RS.kD+~JÔÝÇÒûÓа¸Àýr@#@&~,PP,~D/wKUd+c+ N@#@&~~Vd+@#@&P,P~~,D/ 2mon/b”’+Z@#@&PP,P,~YKYCVM+^xM/RMnmKDN1G;xD@#@&P~P~~,YGYmswmonxM/R2CT+^W!UD@#@&,P,PP,k6~wmon@*DWOC^wlTnPDt+ ~2lT+{YGYCsalL+@#@&P,P~~,D/ C(/GV!OwCT+{wlT+@#@&P,P~P,kxT@#@&P,~P,PNK~AtbVPUWO~M/ +KWPmx[~vk@!.dcwCodbyn*@#@&PP,P,~k{kQF@#@&~~,PP,.+9k:,2.+k+M\nP^Ck+mk9ck*~-n /tG2|mC/Um:nvk*~\xk4Wa{^lk+[CD+`bb~7+xk4Gw|mm/nmGUD+UYvr#@#@&~~,PP~-xdtK2|mCk+ l:`bb’M/cJ7+Ud4Ww|^lk+xmhnJ*@#@&P~P~~,mC/mk9`rb{D/cE1ld+|r9Jb@#@&,PP,P,-+ /4Wa{^Ck+NmO+vk#{.d`r\xdtG2|mC/[lD+Eb@#@&P~~,P~\UktGa{1l/mKUYxO`b#x.k`J7nxktWam^lk+1WUYnUDJb@#@&~P,P~~M/RhG7+U+XO@#@&~,P,PP^WK2@#@&P~+ N~r6@#@&,~DkRm^Gd+@#@&,PEYsBAA==^#~@

    这段代码怎么解不全呢?

  5. huangfeifeu says:

    为什么只能解密,不能加密呢?这段程序代码有问题吗?

  6. Michael says:

    好像跟你浏览器或者系统上是否有一个控件有关系,具体的我也得研究研究:(

  7. kinghtonline says:

    我也是这觉得有点问题,有谁知道帮帮我,谢谢!

  8. 太复杂了,呵呵!

  9. minecraft says:

    Excellent post. Keep posting such kind of information on your page.
    Im really impressed by it.
    Hello there, You have done an incredible job.

    I’ll definitely digg it and in my view recommend to my friends.
    I’m sure they’ll be benefited from this website.

  10. Great post.

  11. WOW just what I was looking for. Came here by searching
    for minecraft free download 2018

  12. You really make it seem so easy with your presentation but I find this topic to be really
    something that I think I would never understand. It seems too
    complex and very broad for me. I am looking forward for your
    next post, I will try to get the hang of it!

  13. My spouse and I absolutely love your blog and find almost all of your post’s
    to be just what I’m looking for. Would you offer guest writers to write content for you personally?
    I wouldn’t mind publishing a post or elaborating on some of
    the subjects you write with regards to here. Again, awesome
    web log!

  14. I relish, result in I found just what I was looking for.
    You have ended my 4 day lengthy hunt! God Bless you man. Have a great day.
    Bye

  15. It’s appropriate time to make some plans for the future and it is time
    to be happy. I have learn this submit and if I may I want to counsel you some attention-grabbing things or
    tips. Maybe you can write next articles regarding this article.
    I wish to learn even more issues approximately it!

  16. I know this if off topic but I’m looking into starting my own blog
    and was wondering what all is needed to get set up? I’m assuming
    having a blog like yours would cost a pretty penny?
    I’m not very web smart so I’m not 100% positive. Any recommendations or advice would be greatly appreciated.
    Appreciate it

  17. Sling TV says:

    Ahaa, its nice conversation about this paragraph here at this web site, I have read all that, so now me also commenting at this place.

  18. Pingback: 2019
  19. Sling TV says:

    If you are going for finest contents like I do, only go to see this site all the time since it
    presents feature contents, thanks

  20. This is a topic which is near to my heart… Thank you!
    Where are your contact details though?

  21. Good way of telling, and fastidious piece of writing to obtain facts concerning my presentation subject,
    which i am going to present in school.

  22. Hi there! I know this is kind of off-topic but I had to ask.
    Does managing a well-established website such as yours take a
    massive amount work? I’m brand new to running a blog but I do write in my diary on a daily basis.

    I’d like to start a blog so I will be able to share my own experience and thoughts online.
    Please let me know if you have any suggestions or tips for
    brand new aspiring blog owners. Thankyou!

Leave a Reply

Your email address will not be published. Required fields are marked *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image