如何在你的文章中添加隐藏的版权信息

简介: 如何在你的文章中添加隐藏的版权信息

这篇文章,首先会让你越看越糊涂,然后再让你越看越清醒。请坚持看完。

首先,我们来看一段文字:

一我日是一青技南是我一是个青每南天我更是新青的南栏我目是,青希南望我做是到青在南每我天是几青分南钟我让是你青获南得我提是高青。南

看完以后,你有什么想法?你会不会觉得我是自恋狂?神经病?复读机?脸滚键盘?

很好,那么再看下面这一句话:

一‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌日‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌一‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍技‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌是‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌一‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌个‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍每‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌天‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌更‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌新‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍的‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌栏‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌目‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌,‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍希‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌望‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌做‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌到‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍在‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌每‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌天‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌几‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍分‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌钟‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌让‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌你‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍获‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌得‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌提‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌高‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍。‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌

是不是正常多了?

但是如果我说这两段话,实际上是一样的,你信不信?

现在有4个中文汉字: 我是青南,首先介绍Python的 ord函数,它可以查询Unicode字符对应的Unicode码

>>> ord('我')
25105
>>> ord('是')
26159
>>> ord('青')
38738
>>> ord('南')
21335

接下来,介绍另一个函数 chr。它的作用是把Unicode编码转换为Unicode字符。

例如:

>>> chr(21335)
'南'
>>> chr(38738)
'青'

最后,介绍 bin函数,它可以把十进制数字转换为二进制数字:

>>> bin(6)
'0b110'
>>> bin(57)
'0b111001'

以上就是本文涉及到的全部知识。下面,开始转换。

由于Unicode是十进制数字,那么就能进一步转换为二进制数字:

>>> bin(25105)
'0b110001000010001'

把前面的 0b去掉:

>>> bin(25105)[2:]
'110001000010001'

那么, 我是青南转换为二进制以后,分别为:

>>> for char in '我是青南':
...  print(char, bin(ord(char))[2:])
...
我 110001000010001
是 110011000101111
青 1001011101010010
南 101001101010111

那么原来那个看起来很混乱的句子是怎么生成的呢?

from itertools import cycle
signature = '我是青南'
text = '一日一技是一个每天更新的栏目,希望做到在每天几分钟让你获得提高。'
complex_text = ''
for word, sig in zip(text, cycle(signature)):
    complex_text = complex_text + word + sig
print(complex_text)

运行效果如下图所示:

那么如果把 我是青南先转换为他们对应的二进制字符串,然后再穿插到原文中,效果就会变成这样:

from itertools import cycle
signature_bin_list = ['110001000010001',
                      '110011000101111',
                      '1001011101010010',
                      '101001101010111']
text = '一日一技是一个每天更新的栏目,希望做到在每天几分钟让你获得提高。'
complex_text = ''
for word, sig in zip(text, cycle(signature_bin_list)):
    complex_text = complex_text + word + sig
print(complex_text)

运行效果如下:

到目前为止,你肯定不知道我在干什么。

下面,我将会介绍两个神奇的数字:

8204
8205

如果我使用 chr把这两个数字转换为Unicode字符会怎么样?

我们来试一试:

很奇怪对吧?什么东西都没有?难道这两个数字转换为Unicode字符以后,都是空格??

没事,我们把字符串形式的二进制数字中的 1替换为 chr(8204),把 0替换为

chr(8205)
1. from itertools import cycle
2. 
3. signature_bin_list = ['110001000010001',
4.                       '110011000101111',
5.                       '1001011101010010',
6.                       '101001101010111']
7. text = '一日一技是一个每天更新的栏目,希望做到在每天几分钟让你获得提高。'
8. complex_text = ''
9. for word, sig in zip(text, cycle(signature_bin_list)):
10.     complex_text = complex_text + word + sig.replace('1', chr(8204)).replace('0', chr(8205))
11. print(complex_text)

运行效果是什么样的?请看下面这张图:

奇奇怪怪的符号没有了,一切都变得干干净净,就像下面这样:

一‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌日‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌一‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍技‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌是‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌一‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌个‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍每‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌天‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌更‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌新‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍的‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌栏‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌目‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌,‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍希‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌望‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌做‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌到‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍在‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌每‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌天‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌几‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍分‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌钟‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌让‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌你‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍获‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌得‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌提‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌高‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍。‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌

现在,你在电脑上把这一段话复制下来,存到记事本里面,效果如下图所示:

看起来很正常对吧。那么现在,用vim把它打开,你看到的将会是这样的:

在网页上面,一切都正常,但是一旦有人复制了你的内容,直接转载到了它自己的网站上。那么你可以到法院去起诉他了,因为这些没有宽度的符号,就是证据。

在下一次的文章中,我将会讲到,如何把本文的过程你过来,把隐藏的信息提取出来。

目录
相关文章
|
网络架构 网络协议 网络安全
带你读《计算机网络问题与解决方案:一种构建弹性现代网络的创新方法》之三:网络传输建模
本书分为三个主要部分,涵盖了数据传输、控制平面,以及具体设计(或者更确切地说是技术)场景。
|
11月前
|
JSON 缓存 JavaScript
【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))
【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))
393 1
|
11月前
|
SQL 数据库 索引
内连接(INNER JOIN)在SQL中的简单应用与技巧
在SQL查询中,内连接(INNER JOIN)是一种基本且常用的连接类型,用于从两个或多个表中检索匹配的记录
1013 0
|
存储 Java 开发者
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
213 11
|
缓存 JavaScript API
NodeJS代理配置指南:详细步骤和代码示例
**Node.js 代理配置:解决HTTP请求转发与CORS挑战** 在现代开发环境中,Node.js以其高效和灵活性深受青睐,但正确配置代理以处理跨域请求和API调用仍是复杂任务。本文提供全面指南,从基础到高级设置,教授如何在Node.js中使用代理,覆盖httpOptions、npm代理及第三方库的运用,以增强API调用灵活性。
1130 23
NodeJS代理配置指南:详细步骤和代码示例
|
存储 人工智能 安全
保障隐私的Elasticsearch AI搜索解决方案
【8月更文第28天】随着大数据和人工智能技术的发展,搜索引擎在日常生活中扮演着越来越重要的角色。然而,用户隐私保护成为了一个不容忽视的问题。本文将探讨如何在确保用户数据隐私的同时,利用Elasticsearch实现智能搜索功能。我们将介绍一种综合方案,该方案结合了加密技术、差分隐私、匿名化处理以及安全多方计算等方法,以保障用户数据的安全性
777 0
|
机器学习/深度学习 自然语言处理 TensorFlow
使用Python实现深度学习模型:语言模型与文本生成
使用Python实现深度学习模型:语言模型与文本生成
268 5
|
Java 应用服务中间件 Linux
Tomcat的安装和配置详细教程
Tomcat的安装和配置详细教程
|
运维 Kubernetes 应用服务中间件
全面容器化之后,来电科技实现微服务治理
MSE 服务治理帮助我们系统以很低的成本无侵入的方式快速实现了全链路灰度能力,进一步提升了我们系统的稳定性,让我们新需求的迭代上线更加地安心。-- 来电科技架构师 汤长征
全面容器化之后,来电科技实现微服务治理
|
Web App开发 缓存 算法
初识HTTP
初识HTTP
233 1