使用文本水印“加密”你的题解代码
BunDragon126 · · 科技·工程
引入
本人在刷前端大佬 张洪 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;
}
嗯,你们绝对看不到水印内容。
长短
优点:
- 简单易用,可以很好的防止别人 Copy Your Code。
- 用在博客上可以保护版权。
- 网站提供解密功能和 JS 脚本。
缺点:
- 显而易见,神奇的字符会在编码上出现问题。(网页上问题不大,能防御 C 玩)
高级用法——生成 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 生成,不保证内容准确性。
这篇文章介绍了一个前端项目,旨在通过添加水印来保护代码的版权。以下是文章的总结:
-
项目背景:作者在阅读前端开发者张洪 Heo 的文章时,受到启发,决定分享一个类似的项目。
-
项目功能:该项目允许用户在代码中嵌入水印,以防止他人直接复制代码。水印通过插入特殊字符实现,使得代码在不使用特定解码工具的情况下难以阅读。
-
使用方法:
- 用户将代码粘贴到指定位置,并输入水印内容。
- 系统会自动在代码中插入特殊字符,生成带有水印的代码。
- 生成的代码在网页上显示正常,但复制后会包含大量乱码,起到保护作用。
-
优缺点:
- 优点:简单易用,能有效防止代码被直接复制,适合用于博客等场景以保护版权。
- 缺点:特殊字符可能导致编码问题,尤其在非网页环境下。
-
高级用法:
- 用户可以生成 JS 脚本,将水印功能嵌入到网页中。
- 文章提供了详细的代码示例,展示了如何将水印功能添加到 HTML 页面中。
-
示例:文章通过一个简单的 HTML 页面示例,展示了水印功能的效果。用户可以通过解码工具读取水印内容,验证水印的存在。
总结来说,该项目通过插入特殊字符的方式为代码添加水印,有效防止了代码的直接复制,适合用于保护版权。