使用文本水印“加密”你的题解代码

· · 科技·工程

引入

本人在刷前端大佬 张洪 Heo 的文章的时候发现他写了一个项目,有感而发。

文章链接 项目链接

项目截图

食用方法

让我们找一份代码,就你了 A+B Problem

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a, b;
    cin >> a >> b;
    cout << a + b;
    return 0;
}

根据网站提示粘进去,输入你的水印内容。

让我们看看结果:

#include <bits/stdc++.󠇘󠆯󠆉󠇖󠆞󠆥󠇔󠆫󠆓󠇗󠆐󠅱󠇕󠆧󠆢󠇗󠆫󠅿󠇘󠆒󠆛󠄐󠄶󠅢󠅕󠅔󠅕󠅢󠅙󠅓󠅛󠄐󠄳󠅘󠅕󠅞󠄐󠇕󠅺󠆐󠇕󠅵󠆕󠇔󠆪󠅶󠇖󠆠󠆤󠇕󠅽󠆠󠇟󠆬󠅼󠇔󠆭󠆐󠇔󠆨󠅽󠇗󠆄󠆘󠇗󠅹󠆩󠇖󠆞󠅺󠇗󠆬󠆆󠇗󠆐󠅱󠇕󠅿󠆟󠇖󠆈󠆟󠇖󠅹󠆃󠇔󠆨󠅽󠇕󠆬󠅰󠇗󠆊󠅴󠇓󠅰󠅲h>
using nam󠇘󠆯󠆉󠇖󠆞󠆥󠇔󠆫󠆓󠇗󠆐󠅱󠇕󠆧󠆢󠇗󠆫󠅿󠇘󠆒󠆛󠄐󠄶󠅢󠅕󠅔󠅕󠅢󠅙󠅓󠅛󠄐󠄳󠅘󠅕󠅞󠄐󠇕󠅺󠆐󠇕󠅵󠆕󠇔󠆪󠅶󠇖󠆠󠆤󠇕󠅽󠆠󠇟󠆬󠅼󠇔󠆭󠆐󠇔󠆨󠅽󠇗󠆄󠆘󠇗󠅹󠆩󠇖󠆞󠅺󠇗󠆬󠆆󠇗󠆐󠅱󠇕󠅿󠆟󠇖󠆈󠆟󠇖󠅹󠆃󠇔󠆨󠅽󠇕󠆬󠅰󠇗󠆊󠅴󠇓󠅰󠅲espace std;
int main(){
    int a, b;
  󠇘󠆯󠆉󠇖󠆞󠆥󠇔󠆫󠆓󠇗󠆐󠅱󠇕󠆧󠆢󠇗󠆫󠅿󠇘󠆒󠆛󠄐󠄶󠅢󠅕󠅔󠅕󠅢󠅙󠅓󠅛󠄐󠄳󠅘󠅕󠅞󠄐󠇕󠅺󠆐󠇕󠅵󠆕󠇔󠆪󠅶󠇖󠆠󠆤󠇕󠅽󠆠󠇟󠆬󠅼󠇔󠆭󠆐󠇔󠆨󠅽󠇗󠆄󠆘󠇗󠅹󠆩󠇖󠆞󠅺󠇗󠆬󠆆󠇗󠆐󠅱󠇕󠅿󠆟󠇖󠆈󠆟󠇖󠅹󠆃󠇔󠆨󠅽󠇕󠆬󠅰󠇗󠆊󠅴󠇓󠅰󠅲  cin >> a >> b;
    cout << a + b;
    re󠇘󠆯󠆉󠇖󠆞󠆥󠇔󠆫󠆓󠇗󠆐󠅱󠇕󠆧󠆢󠇗󠆫󠅿󠇘󠆒󠆛󠄐󠄶󠅢󠅕󠅔󠅕󠅢󠅙󠅓󠅛󠄐󠄳󠅘󠅕󠅞󠄐󠇕󠅺󠆐󠇕󠅵󠆕󠇔󠆪󠅶󠇖󠆠󠆤󠇕󠅽󠆠󠇟󠆬󠅼󠇔󠆭󠆐󠇔󠆨󠅽󠇗󠆄󠆘󠇗󠅹󠆩󠇖󠆞󠅺󠇗󠆬󠆆󠇗󠆐󠅱󠇕󠅿󠆟󠇖󠆈󠆟󠇖󠅹󠆃󠇔󠆨󠅽󠇕󠆬󠅰󠇗󠆊󠅴󠇓󠅰󠅲turn 󠇘󠆯󠆉󠇖󠆞󠆥󠇔󠆫󠆓󠇗󠆐󠅱󠇕󠆧󠆢󠇗󠆫󠅿󠇘󠆒󠆛󠄐󠄶󠅢󠅕󠅔󠅕󠅢󠅙󠅓󠅛󠄐󠄳󠅘󠅕󠅞󠄐󠇕󠅺󠆐󠇕󠅵󠆕󠇔󠆪󠅶󠇖󠆠󠆤󠇕󠅽󠆠󠇟󠆬󠅼󠇔󠆭󠆐󠇔󠆨󠅽󠇗󠆄󠆘󠇗󠅹󠆩󠇖󠆞󠅺󠇗󠆬󠆆󠇗󠆐󠅱󠇕󠅿󠆟󠇖󠆈󠆟󠇖󠅹󠆃󠇔󠆨󠅽󠇕󠆬󠅰󠇗󠆊󠅴󠇓󠅰󠅲0;
}

嗯,你们绝对看不到水印内容。

长短

优点:

缺点:

高级用法——生成 JS 脚本

生成方法很简单,看图说话:

应该会得到这样的代码:

<script>document.addEventListener('DOMContentLoaded',function(){class W{constructor(){this.C=30}b(t){return t<16?String.fromCodePoint(0xFE00+t):String.fromCodePoint(0xE0100+t-16)}s(t){let p=[],l=[...t].length;if(l<=this.C)p.push(Math.floor(Math.random()*l));else for(let i=0;i<l;i+=this.C)p.push(i+Math.floor(Math.random()*Math.min(this.C,l-i)));return p}e(t,m){let p=this.s(t),a=[...t],b=new TextEncoder().encode(m);return p.forEach(i=>{let c=a[i];b.forEach(b=>c+=this.b(b));a[i]=c}),a.join('')}}function p(n){if(!n||!n.textContent)return;let t=n.textContent.trim();t&&t.length>1&&(n.textContent=new W().e(t,'这篇文章已经被 Frederick Chen 加入了水印,你不用特殊编码可是打不开的。'))}function w(n){if(!n)return;n.nodeType===3?p(n):n.childNodes&&n.childNodes.forEach(c=>w(c))}w(document.body);new MutationObserver(m=>m.forEach(m=>m.addedNodes.forEach(n=>w(n)))).observe(document.body,{childList:!0,subtree:!0})});</script>

这里熟悉 HTML 的同学就知道往哪里加了。

给个例子:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试一下我们的水印</title>
    <script>document.addEventListener('DOMContentLoaded',function(){class W{constructor(){this.C=30}b(t){return t<16?String.fromCodePoint(0xFE00+t):String.fromCodePoint(0xE0100+t-16)}s(t){let p=[],l=[...t].length;if(l<=this.C)p.push(Math.floor(Math.random()*l));else for(let i=0;i<l;i+=this.C)p.push(i+Math.floor(Math.random()*Math.min(this.C,l-i)));return p}e(t,m){let p=this.s(t),a=[...t],b=new TextEncoder().encode(m);return p.forEach(i=>{let c=a[i];b.forEach(b=>c+=this.b(b));a[i]=c}),a.join('')}}function p(n){if(!n||!n.textContent)return;let t=n.textContent.trim();t&&t.length>1&&(n.textContent=new W().e(t,'这篇文章已经被 Frederick Chen 加入了水印,你不用特殊编码可是打不开的。'))}function w(n){if(!n)return;n.nodeType===3?p(n):n.childNodes&&n.childNodes.forEach(c=>w(c))}w(document.body);new MutationObserver(m=>m.forEach(m=>m.addedNodes.forEach(n=>w(n)))).observe(document.body,{childList:!0,subtree:!0})});</script>
</head>
<body>

<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>

</body>
</html>

它长这样:

我们读取水印看看:

成功!

那么这有什么用呢?有自己博客的朋友就觉得很香了。

后面给 自己的博客 也整一个

总结(From Deepseek R1)

AI 生成,不保证内容准确性。

这篇文章介绍了一个前端项目,旨在通过添加水印来保护代码的版权。以下是文章的总结:

  1. 项目背景:作者在阅读前端开发者张洪 Heo 的文章时,受到启发,决定分享一个类似的项目。

  2. 项目功能:该项目允许用户在代码中嵌入水印,以防止他人直接复制代码。水印通过插入特殊字符实现,使得代码在不使用特定解码工具的情况下难以阅读。

  3. 使用方法

    • 用户将代码粘贴到指定位置,并输入水印内容。
    • 系统会自动在代码中插入特殊字符,生成带有水印的代码。
    • 生成的代码在网页上显示正常,但复制后会包含大量乱码,起到保护作用。
  4. 优缺点

    • 优点:简单易用,能有效防止代码被直接复制,适合用于博客等场景以保护版权。
    • 缺点:特殊字符可能导致编码问题,尤其在非网页环境下。
  5. 高级用法

    • 用户可以生成 JS 脚本,将水印功能嵌入到网页中。
    • 文章提供了详细的代码示例,展示了如何将水印功能添加到 HTML 页面中。
  6. 示例:文章通过一个简单的 HTML 页面示例,展示了水印功能的效果。用户可以通过解码工具读取水印内容,验证水印的存在。

总结来说,该项目通过插入特殊字符的方式为代码添加水印,有效防止了代码的直接复制,适合用于保护版权。