大家好,歡迎來到編程教室~我是Crossin。 這兩天有個(gè)事關(guān)很多人的新聞: 為什么說事關(guān)很多人?因?yàn)橐韵逻@兩個(gè)場景,想必大家都遇到過: 出現(xiàn)這種情況,原因在于各平臺(tái)不想讓自己辛苦獲取的流量白白被別家薅走,所以限制了其他平臺(tái)的鏈接。而其他平臺(tái)的應(yīng)對之策,就是弄出火星文一般的口令碼,讓你復(fù)制到其App里打開。 如今互聯(lián)網(wǎng)時(shí)代,“流量”是要成本的,各家出于商業(yè)層面的考量,在自己的地盤上做限制,倒是可以理解的事情。然而結(jié)果就是讓用戶受罪。本來一鍵就能完成操作,硬生生被弄成兩三步+手動(dòng)切換App才能完成。 而且,這種限制常常也會(huì)誤傷。比如我之前有篇文章里做了個(gè)網(wǎng)頁小游戲的開發(fā)案例,演示網(wǎng)址就接連被屏蔽。(就是這篇:王校長一分鐘能吃多少熱狗?| 小游戲) 所以這個(gè)消息出來,絕大部分用戶是拍手叫好的,甚至有人用上了“推倒柏林墻”的說法。但我覺得吧,這事兒也沒那么簡單。 1. 屏蔽網(wǎng)址并不全是針對競爭對手,也有很大一部分是針對不合規(guī)或者高風(fēng)險(xiǎn)的網(wǎng)站。那種假冒紅包、中獎(jiǎng)的鏈接,大家或多或少可能也遇到過,尤其中老人對這些鏈接的真假難以判斷。所以解除屏蔽網(wǎng)址肯定不是一刀切,該限制的還是得限制。有的平臺(tái)過去對于鏈接一概不跳轉(zhuǎn),那之后可能要增加不少工作量了。 2. 作為一個(gè)有很多群的群主,我相當(dāng)厭惡那些是朋友就抽我一下、是兄弟就砍我一刀的推廣鏈接。為了幾毛錢(還不一定能拿到)的優(yōu)惠,把一個(gè)群的幾百人都騷擾了,屬實(shí)煩人。后面如果解除限制,方便的同時(shí),估計(jì)垃圾信息也會(huì)跟著多起來。我反正做好準(zhǔn)備了,誰發(fā)踢誰! 3. 這次大家的關(guān)注點(diǎn)主要都集中在微信身上,有種“天下苦tx久矣”的感覺。但這里我要替微信說句話了:如果微信聊天里不允許跳轉(zhuǎn)其他平臺(tái),那別的平臺(tái)是不是也不應(yīng)該限制別人在聊天/文章/視頻/直播中留微信號呢?在其他平臺(tái)上留微信被刪文封號的事太多了,如果這個(gè)不放開,那是不是有點(diǎn)欺負(fù)人鵝了? 另外我再說個(gè)冷知識:最初其實(shí)是淘寶主動(dòng)停止來自微信的跳轉(zhuǎn)鏈接,也是淘寶主動(dòng)禁止百度收錄淘寶內(nèi)容的。 這里面有商業(yè)競爭的因素,但也有出于反詐防釣魚的原因。有興趣的可以搜索了解一下阿里的“杜鵑計(jì)劃”。 話說回來,如果今天你被監(jiān)控了,你發(fā)的信息都會(huì)被人攔截,然后你也想搞個(gè)火星文口令躲過自動(dòng)識別,有什么辦法? 我來教大家?guī)讉€(gè)簡單的實(shí)現(xiàn)。 1. URL Encoding import urllib.parse text = 'Crossin的編程教室就是棒??!就!是!棒!' secret = urllib.parse.quote(text) print(secret) 輸出結(jié)果: Crossin%E7%9A%84%E7%BC%96%E7%A8%8B%E6%95%99%E5%AE%A4%E5%B0%B1%E6%98%AF%E6%A3%92%E5%95%8A%EF%BC%81%E5%B0%B1%EF%BC%81%E6%98%AF%EF%BC%81%E6%A3%92%EF%BC%81 解碼: text = urllib.parse.unquote(secret) print(text) 這個(gè)是URL編碼,也叫做百分號編碼,可以將中文、符合等非英文字符轉(zhuǎn)成 百分號+字母+數(shù)字 的形式,在web開發(fā)中經(jīng)常會(huì)用到(比如URL地址里的參數(shù))。不過你也發(fā)現(xiàn)了,英文字母是不會(huì)動(dòng)的。 2. Base64 import base64 text = 'Crossin的編程教室就是棒啊!就!是!棒!' secret = base64.b64encode(text.encode()) print(secret) 輸出結(jié)果: b'Q3Jvc3NpbueahOe8lueoi+aVmeWupOWwseaYr+ajkuWViu+8geWwse+8geaYr++8geajku+8gQ==' 解碼: text = base64.b64decode(secret) print(text.decode()) Base64 是一種非常經(jīng)典的文本編碼方式,程序員的最愛。在程序員的聚集地 v2ex 上,你會(huì)發(fā)現(xiàn)大家留的聯(lián)系方式都是一串亂碼,那些基本都用的是 Base64。 Base64有個(gè)特征,就是最后常會(huì)用 = 進(jìn)行補(bǔ)齊(但不是一定會(huì)有)。另外,它不能直接對中文進(jìn)行操作,需要先進(jìn)行文字編碼,通常是 UTF8 或者 GBK。其實(shí)這一步本身就讓肉身無法直接閱讀了,比如上述例子的 UTF8 編碼為: b'Crossin\xe7\x9a\x84\xe7\xbc\x96\xe7\xa8\x8b\xe6\x95\x99\xe5\xae\xa4\xe5\xb0\xb1\xe6\x98\xaf\xe6\xa3\x92\xe5\x95\x8a\xef\xbc\x81\xe5\xb0\xb1\xef\xbc\x81\xe6\x98\xaf\xef\xbc\x81\xe6\xa3\x92\xef\xbc\x81' 但對于計(jì)算程序來說,這段編碼和原文本幾乎是一樣的。 3. 移位加密 這是一種很古老的加密方式,據(jù)說可以追溯到愷撒在戰(zhàn)爭中傳遞密信。原理就是把所有字母都往后移動(dòng)固定的位數(shù),比如 a->d,b->e, c->f,這樣原本的話就看不懂了。 對于中文,雖然沒有字母這樣的概念,但在計(jì)算機(jī)里同樣也是有一個(gè)對應(yīng)的數(shù)值,所以用程序去進(jìn)行位移計(jì)算很容易。 text = 'Crossin的編程教室就是棒??!就!是!棒!' secret = '' key = 5 for i in text: secret += chr(ord(i) + key) print(secret) 輸出結(jié)果: Hwtxxns皉縟稐敞宩尶昴棗問&尶&昴&棗& 解碼: text = '' for i in secret: text += chr(ord(i) - key) print(text) Python 里,內(nèi)置函數(shù) ord 是把一個(gè)字符轉(zhuǎn)成對應(yīng)的數(shù)值,chr 則是發(fā)過來,把數(shù)值轉(zhuǎn)成對應(yīng)的字符。 你可以自定義一個(gè) key,用來進(jìn)行加密解密的計(jì)算(記住不要告訴別人 你也可以每次用一個(gè)隨機(jī)的 key,然后把 key 藏在你的密文中。比如: N}z~~ty皏縭稖敤宯尼昺棝啕,尼,昺,棝,@11 解密的時(shí)候,先提取 key,然后再進(jìn)行解密。 使用動(dòng)態(tài)隨機(jī)key的代碼不復(fù)雜,就留做今天的作業(yè)啦! |
|