文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

隐写术:如何正确保护文章的版权?

2024-12-03 12:30

关注

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

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

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

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

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

是不是正常多了?

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

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

  1. >>> ord('我'
  2. 25105 
  3. >>> ord('是'
  4. 26159 
  5. >>> ord('青'
  6. 38738 
  7. >>> ord('南'
  8. 21335 

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

例如:

  1. >>> chr(21335) 
  2. '南' 
  3. >>> chr(38738) 
  4. '青' 

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

  1. >>> bin(6) 
  2. '0b110' 
  3. >>> bin(57) 
  4. '0b111001' 

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

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

  1. >>> bin(25105) 
  2. '0b110001000010001' 

把前面的0b去掉:

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

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

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

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

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

运行效果如下图所示:

 

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

  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 
  11. print(complex_text) 

运行效果如下:

 

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

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

  1. 8204 
  2. 8205 

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

我们来试一试:

 

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

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

  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把它打开,你看到的将会是这样的:

 

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

 

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

本文转载自微信公众号「未闻Code」,可以通过以下二维码关注。转载本文请联系未闻Code公众号。

 

来源:未闻Code内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯