Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在你的文章中添加隐藏的版权信息

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

作者头像
青南
发布于 2019-03-18 06:49:15
发布于 2019-03-18 06:49:15
1.8K00
代码可运行
举报
文章被收录于专栏:未闻Code未闻Code
运行总次数:0
代码可运行

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

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

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

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

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

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

是不是正常多了?

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> ord('我')25105>>> ord('是')26159>>> ord('青')38738>>> ord('南')21335

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

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> chr(21335)'南'>>> chr(38738)'青'

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> bin(6)'0b110'>>> bin(57)'0b111001'

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> bin(25105)'0b110001000010001'

把前面的 0b去掉:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> bin(25105)[2:]'110001000010001'

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for char in '我是青南':...  print(char, bin(ord(char))[2:])...1100010000100011100110001011111001011101010010101001101010111

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from itertools import cycle
signature = '我是青南'text = '一日一技是一个每天更新的栏目,希望做到在每天几分钟让你获得提高。'complex_text = ''for word, sig in zip(text, cycle(signature)):    complex_text = complex_text + word + sigprint(complex_text)

运行效果如下图所示:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 + sigprint(complex_text)

运行效果如下:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
82048205

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

我们来试一试:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.replace('1', chr(8204)).replace('0', chr(8205))print(complex_text)

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
显隐术:如何阅读由零宽字符写的信息?
在前几天的文章:隐写术:如何正确保护文章的版权?中,我们说到可以使用零宽字符把版权信息隐藏到正文中,从而既不影响阅读,又能在被抄袭的时候举证。
青南
2021/03/04
8780
【Python数据分析】常用内置函数(一)
本期内容为python的常用内置函数~ 参考书籍:《Python数据分析、挖掘与可视化》
颜颜yan_
2023/10/16
1680
【Python数据分析】常用内置函数(一)
python 代码转换成0101010
这种数据让我们来读就比较难了,如果我告诉你上面的数字其实对应的就是下面的内容,是否就很容易看懂了呢。
叶子陪你玩
2022/05/22
5590
python 代码转换成0101010
【自然语言处理】NLP入门(四):1、正则表达式与Python中的实现(4):字符串常用函数
【自然语言处理】NLP入门(一):1、正则表达式与Python中的实现(1):字符串构造、字符串截取
Qomolangma
2024/07/30
1540
【自然语言处理】NLP入门(四):1、正则表达式与Python中的实现(4):字符串常用函数
Python之内置函数
''' 内置函数 :     作用域相关(2) :         locals : 返回当前局部作用域内的所有内容         globals : 返回全局作用域内的所有内容     基础数据类型相关(38) :         和数字相关 :             数据类型 :                 bool : 将数字强制转换成bool型                 int : 将数字强制转换成int型                 float : 将数字强制转换成float型
py3study
2020/01/15
5580
python基础教程:内置函数(一)
Python解释器内置了很多函数和类型,可以随时随地在编程中使用。其实,我们在前面的学习中已经接触过好多内置函数。
一墨编程学习
2019/05/15
8690
【Python百日精通】Python数据类型转换全指南:轻松搞定数据处理
在编程中,数据类型的转换是一个非常重要的概念。它使得程序能够灵活地处理不同类型的数据,满足不同的需求。特别是在 Python 中,input() 函数接收的用户输入默认都是字符串类型,如果用户输入的是数字,并且希望将其作为整数或浮点数进行计算,就需要进行数据类型的转换。
屿小夏
2024/07/29
2280
如何使用 Python 隐藏图像中的数据
秘密数据可以是任何格式的数据,如文本甚至文件。简而言之,隐写术的主要目的是隐藏任何文件(通常是图像、音频或视频)中的预期信息,而不实际改变文件的外观,即文件外观看起来和以前一样。
小白学视觉
2022/02/14
4.3K0
如何使用 Python 隐藏图像中的数据
字符编码简介
所谓编码(Encoding),是信息从一种形式或格式转换为另一种形式的过程。例如“山雪河冰野萧瑟,青是烽烟白人骨”中的“烽烟”,就是古代将敌人入侵的信息,转换为“烽烟”得以快速传递——古老的长途通讯方式之一。看到“烽烟”的将士们正确理解其含义——没有理解为烧柴做饭,即编码的逆过程,称为解码(Decoding)。
老齐
2021/05/20
2K0
Built-in Functions(p
    在python中有很多的内置函数,这些内置函数让我们更高效,在此将部分相关知识总结一下。
py3study
2020/01/06
4280
通过内置对象理解 Python(八)
bytearray 在一些低级操作中,比如有关字节和位运算,使用 bytearray 对于改变单个字节会更有效。例如下面的魔幻操作:
老齐
2021/12/08
3210
Python数字和字符串学习笔记
其中数字、字符串、元组是不可变的,列表、字典是可变的。 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。
没有故事的陈师傅
2019/07/27
2K0
python-常用内置函数
  - dict / list / tuple / int / str / bool / set
py3study
2020/01/16
4160
python-常用内置函数
【使用Python实现算法】02 原生类型与内置函数
本期话题是 Python 的原生类型和内置函数在算法实现中的一些技巧,首先从最常见的 Python 原生类型开始。
杜逸先
2023/04/13
6650
Python 内置函数 Python builtins 模块
参考链接: int上的Python位函数(bit_length,to_bytes和from_bytes)
用户7886150
2020/12/19
4620
【Python数据魔术】:揭秘类型奥秘,赋能代码创造
encode() 和 decode() 是常用的字符串编码和解码方法,用于将 Unicode 字符串按照指定的编码格式转换为二进制数据,并将二进制数据按照指定的编码格式解析为 Unicode 字符串。
爱喝兽奶的熊孩子
2024/06/14
1320
【Python数据魔术】:揭秘类型奥秘,赋能代码创造
python入门到放弃(三)-基本数据类型之int整数和bool值
#整数可以进行的操作有:bit_length(),计算整数在内存中占用的二进制码的长度
老油条IT记
2020/03/20
5930
python入门到放弃(三)-基本数据类型之int整数和bool值
python 字符串转换long_python整数、字符串、字节串相互转换
int(STRING,BASE)将字符串STRING转成十进制int,其中STRING的基是base。该函数的第一个参数是字符串
用户7886150
2021/01/08
2K0
Python的内置函数和匿名函数
截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。
星陨1357
2023/03/14
1.2K0
力扣刷题笔记--剑指 Offer 15. 二进制中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。
C_H
2022/11/15
3450
推荐阅读
相关推荐
显隐术:如何阅读由零宽字符写的信息?
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验