javascript - 使用 JAVASCRIPT 加密 HTML 源代码。它是如何工作的?

标签 javascript jquery html encryption cryptography

我正在检查是否可以真正加密 html 代码。我找到了一个用 Javascript 加密 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>

您可以尝试在他们的文件中运行。它可以毫不费力地工作。所以任何人都可以告诉它是如何加密的。或者它是什么加密方式?

最佳答案

这被称为URL-encoding 或百分比编码。使用 JavaScript 的 unescape() 可以轻松逆转它 方法,如此处所示。

第一行解密为:

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{cy@>7cvsjC76959684513215

'));

合并为:

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

这传递了字符串;!FQDVY[I nuykD=jrxnB6awfC <vC^oiw nw&bsoth*sw"fj"mygvyq~lb0<0rD <7g{cy@>7cvsjC76959684513215进入i1db319e8af function作为函数参数,然后将结果写入页面。

i1db319e8af然后函数获取该字符串,并将其分成 7695968 上的两部分。然后你就有一个名为 tmp 的变量其中包含两部分:

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

k ( 4513215 ) 具有字符串 813529添加到它,它被追加,导致变量为 4513215813529 .

该函数然后循环 ;!FQDVY[I nuykD=jrxnB6awfC <vC^oiw nw&bsoth*sw"fj"mygvyq~lb0<0rD <7g{cy@>7cvsjC 的长度,并根据该字符串中字符的位置返回看似字符的内容。

请注意,这可能会返回 12字符或可能更多,因为它停在字符 处对我来说,认为它是无效的(不是 UTF-8 的字符)。

不幸的是,我目前无法访问沙箱,因此我无法进一步了解这一点。希望这能为您提供您正在寻找的信息:)

关于javascript - 使用 JAVASCRIPT 加密 HTML 源代码。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47931444/

相关文章:

ASP.NET 向 div 添加不需要的填充

javascript - 在新选项卡中打开附加的 URL

html - 将 .panel 与 FIELDSET 和 .panel-heading 与 LEGEND 组合时的设计问题

php - 如何使用 PHP 将动态文本框保存到数据库

javascript - 根据控制台未注册 Controller

javascript - 为什么 Jquery 无法识别 id 为 "houseNumber[x]"的元素

javascript - 将 JSON 结果列表获取到现有的 HTML 选择中?

javascript - 在 iframe 中查找 div

javascript - 访问 javascript 模块中的模块变量

jquery - 能够将 JQuery Sortable(新顺序)保存到 ASP.Net MVC Controller 吗?