隱寫術:如何正確保護文章的版權?
首先,我們來看一段文字:
一我日是一青技南是我一是個青每南天我更是新青的南欄我目是,青希南望我做是到青在南每我天是幾青分南鐘我讓是你青獲南得我提是高青。南
看完以后,你有什么想法?你會不會覺得我是自戀狂?神經病?復讀機?臉滾鍵盤?
很好,那么再看下面這一句話:
一日一技是一個每天更新的欄目,希望做到在每天幾分鐘讓你獲得提高。
是不是正常多了?
但是如果我說這兩段話,實際上是一樣的,你信不信?
現在有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(8025)
- 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把它打開,你看到的將會是這樣的:
在網頁上面,一切都正常,但是一旦有人復制了你的內容,直接轉載到了它自己的網站上。那么你可以到法院去起訴他了,因為這些沒有寬度的符號,就是證據。
在下一次的文章中,我將會講到,如何把本文的過程你過來,把隱藏的信息提取出來。
本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。