2017-12-21 17 views
0

実際にhtmlコードかどうかを暗号化することが可能であるならば、私はチェックしていました。私はJavascriptでHTMLコードを暗号化する場所を見つけました。 は、私はそれが動作しないか疑問に思うか、どのような形式で誰もが私に教えてくださいできますか?暗号化HTMLソースコード。どのように機能するのですか?

実際のコード

<!DOCTYPE html> 
<html> 
<body> 

<p>This is going to be encrypted.</p> 
</body> 
</html> 

あなたは自分のファイルに実行してみることができ、暗号化されたHTMLコード

<html> 
<head> 
</head> 
<body> 

<script type="text/javascript"> 
<!-- 
eval(unescape('%66%75%6e%63%74%69%6f%6e%20%69%31%64%62%33%31%39%65%38%61%66%28%73%29%20%7b%0a%09%76%61%72%20%72%20%3d%20%22%22%3b%0a%09%76%61%72%20%74%6d%70%20%3d%20%73%2e%73%70%6c%69%74%28%22%37%36%39%35%39%36%38%22%29%3b%0a%09%73%20%3d%20%75%6e%65%73%63%61%70%65%28%74%6d%70%5b%30%5d%29%3b%0a%09%6b%20%3d%20%75%6e%65%73%63%61%70%65%28%74%6d%70%5b%31%5d%20%2b%20%22%38%31%33%35%32%39%22%29%3b%0a%09%66%6f%72%28%20%76%61%72%20%69%20%3d%20%30%3b%20%69%20%3c%20%73%2e%6c%65%6e%67%74%68%3b%20%69%2b%2b%29%20%7b%0a%09%09%72%20%2b%3d%20%53%74%72%69%6e%67%2e%66%72%6f%6d%43%68%61%72%43%6f%64%65%28%28%70%61%72%73%65%49%6e%74%28%6b%2e%63%68%61%72%41%74%28%69%25%6b%2e%6c%65%6e%67%74%68%29%29%5e%73%2e%63%68%61%72%43%6f%64%65%41%74%28%69%29%29%2b%2d%33%29%3b%0a%09%7d%0a%09%72%65%74%75%72%6e%20%72%3b%0a%7d%0a')); 
eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%69%31%64%62%33%31%39%65%38%61%66%28%27') + '%3b%21%46%51%44%56%59%5b%49%20%6e%75%79%6b%44%11%0e%3d%6a%72%78%6e%42%15%0f%36%61%77%66%7f%43%11%08%18%0c%3c%76%43%5e%6f%69%77%20%6e%77%26%62%73%6f%74%68%2a%73%77%22%66%6a%22%6d%79%67%76%79%71%7e%6c%62%30%3c%30%72%44%18%0c%3c%37%67%7b%63%79%40%13%0f%3e%37%63%76%73%6a%437695968%34%35%31%33%32%31%35' + unescape('%27%29%29%3b')); 
// --> 
</script> 
<noscript><i>Javascript required</i></noscript> 

</html> 

。どんな努力をしても動作します。どのように暗号化されたのか誰でも知ることができます。それとも暗号化の種類ですか?

+0

それは文字をエンコードするだけのように見えます。 Ref:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/unescape – Taplar

+1

これは* encoded * not * encrypted *です。エンコーディングは難しくありません –

+0

好奇心の持ち方から、クライアントからHTMLをエンコードする必要性を感じる理由は何ですか? – Taplar

答えて

1

これは、URL-encodingまたはパーセントエンコーディングとして知られています。それは、ここで見られるように、JavaScriptののunescape()方法で容易に可逆的です。

document.write(i1db319e8af(' 

;!FQDVY[I nuykD=jrxnB6awfC<vC^oiw nw&bsoth*sw"fj"mygvyq~lb0<0rD<7g{[email protected]>7cvsjC76959684513215 

')); 

として組み合わさ:

function i1db319e8af(s) { 
    var r = ""; 
    var tmp = s.split("7695968"); 
    s = unescape(tmp[0]); 
    k = unescape(tmp[1] + "813529"); 
    for(var i = 0; i < s.length; i++) { 
     r += String.fromCharCode((parseInt(k.charAt(i%k.length))^s.charCodeAt(i))+-3); 
    } 
    return r; 
} 

第二行は三つの部分に分割される:

最初の行に復号

document.write(i1db319e8af(';!FQDVY[I nuykD=jrxnB6awfC<vC^oiw nw&bsoth*sw"fj"mygvyq~lb0<0rD<7g{[email protected]>7cvsjC76959684513215')); 

これはに文字列;!FQDVY[I nuykD=jrxnB6awfC<vC^oiw nw&bsoth*sw"fj"mygvyq~lb0<0rD<7g{[email protected]>7cvsjC76959684513215を渡しi1db319e8afは、関数パラメータとして機能し、結果はページに表示されます。

i1db319e8af関数は、この文字列を受け取り、そして7695968上の2つの部分に分割し。

;!FQDVY[I nuykD=jrxnB6awfC<vC^oiw nw&bsoth*sw"fj"mygvyq~lb0<0rD<7g{[email protected]>7cvsjC 
4513215 

k4513215が)4513215813529をする変数を引き起こし、を付加されます813529が追加文字列を、持っている:あなたは、2つの部分が含まれていtmpという変数を持っています。

この関数は、;!FQDVY[I nuykD=jrxnB6awfC<vC^oiw nw&bsoth*sw"fj"mygvyq~lb0<0rD<7g{[email protected]>7cvsjCの長さにループし、この文字列内の文字の位置に基づいて文字として表示される文字を返します。それを考えて、私のために文字で止まることを考えると、これは12文字または多分以上を返すことが

注意は、(UTF-8ない文字)は無効です。

残念ながら私は現在サンドボックスにアクセスできませんので、これ以上は進めません。うまくいけば、これはあなたが探している情報を与えるでしょう:)

+0

はい、これは、私がまだこの「どのように?そして、これらの数字は '4513215'と' 813529'です。これらの生成方法 – user7747472

+0

文字列はJavaScriptの[** 'fromCharCode()' **](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)で文字に変換されます。/fromCharCode)メソッドです。作者は、ターゲット文字列が何であったか、そして必要なobfsucated文字列がそれを得るために必要なものを考え出しました。これら2つの数字はどちらもソースコード自体にハードコードされています。それらはまったく生成されません。まあ、バックエンドでPHPやC#のようなものを動的に生成することは可能ですが、それは起こりそうもないでしょうし、JavaScriptで生成されているわけではありません:) –

+0

私にこれを説明してくれてありがとう:)歓声 – user7747472

1

アンエスケープは進文字コード時に動作します。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/unescape

var myAwesomeHTMLString = "<p>Weeeee</p>"; 
 
var hexEncoded = ''; 
 

 
for (var i = 0; i < myAwesomeHTMLString.length; i++) { 
 
    hexEncoded += '%'+ myAwesomeHTMLString.charCodeAt(i).toString(16); 
 
} 
 

 
console.log("'encoded': "+ hexEncoded); 
 
console.log("'unencoded': "+ unescape(hexEncoded));

+0

文字をエンコードしません。 しかし、そのhtmlコードでは、すべてASCIIなどの何かにエンコードされています。わからない – user7747472

+0

16進コードです。エスケープ方法で詳述されているように、私はコメントに文書をリンクしました。 – Taplar

0

解読するために必要とされる全ての、すなわちunescape方法、ブラウザで容易に入手可能であるので、これは非常に弱い暗号化であろう。

関連する問題