限期解除!要跟乱七八糟的口令说拜拜了

Crossin的编程教室

共 2840字,需浏览 6分钟

 ·

2021-09-19 01:03

大家好,欢迎来到编程教室~我是Crossin。


这两天有个事关很多人的新闻:


转自 澎湃新闻 https://m.thepaper.cn/baijiahao_14480198


为什么说事关很多人?因为以下这两个场景,想必大家都遇到过:


出现这种情况,原因在于各平台不想让自己辛苦获取的流量白白被别家薅走,所以限制了其他平台的链接。而其他平台的应对之策,就是弄出火星文一般的口令码,让你复制到其App里打开。


如今互联网时代,“流量”是要成本的,各家出于商业层面的考量,在自己的地盘上做限制,倒是可以理解的事情。然而结果就是让用户受罪。本来一键就能完成操作,硬生生被弄成两三步+手动切换App才能完成。


而且,这种限制常常也会误伤。比如我之前有篇文章里做了个网页小游戏的开发案例,演示网址就接连被屏蔽。(就是这篇:王校长一分钟能吃多少热狗?| 小游戏


所以这个消息出来,绝大部分用户是拍手叫好的,甚至有人用上了“推倒柏林墙”的说法。但我觉得吧,这事儿也没那么简单。


1. 屏蔽网址并不全是针对竞争对手,也有很大一部分是针对不合规或者高风险的网站。那种假冒红包、中奖的链接,大家或多或少可能也遇到过,尤其中老人对这些链接的真假难以判断。所以解除屏蔽网址肯定不是一刀切,该限制的还是得限制。有的平台过去对于链接一概不跳转,那之后可能要增加不少工作量了。


2. 作为一个有很多群的群主,我相当厌恶那些是朋友就抽我一下、是兄弟就砍我一刀的推广链接。为了几毛钱(还不一定能拿到)的优惠,把一个群的几百人都骚扰了,属实烦人。后面如果解除限制,方便的同时,估计垃圾信息也会跟着多起来。我反正做好准备了,谁发踢谁!


3. 这次大家的关注点主要都集中在微信身上,有种“天下苦tx久矣”的感觉。但这里我要替微信说句话了:如果微信聊天里不允许跳转其他平台,那别的平台是不是也不应该限制别人在聊天/文章/视频/直播中留微信号呢?在其他平台上留微信被删文封号的事太多了,如果这个不放开,那是不是有点欺负鹅了?


另外我再说个冷知识:最初其实是淘宝主动停止来自微信的跳转链接,也是淘宝主动禁止百度收录淘宝内容的。



这里面有商业竞争的因素,但也有出于反诈防钓鱼的原因。有兴趣的可以搜索了解一下阿里的“杜鹃计划”。





话说回来,如果今天你被监控了,你发的信息都会被人拦截,然后你也想搞个火星文口令躲过自动识别,有什么办法?


我来教大家几个简单的实现。


1. URL Encoding


import urllib.parsetext = 'Crossin的编程教室就是棒啊!就!是!棒!'secret = urllib.parse.quote(text)print(secret)


输出结果:

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)


这个是URL编码,也叫做百分号编码,可以将中文、符合等非英文字符转成 百分号+字母+数字 的形式,在web开发中经常会用到(比如URL地址里的参数)。不过你也发现了,英文字母是不会动的。


2. Base64


import base64text = 'Crossin的编程教室就是棒啊!就!是!棒!'secret = base64.b64encode(text.encode())print(secret)


输出结果:

b'Q3Jvc3NpbueahOe8lueoi+aVmeWupOWwseaYr+ajkuWViu+8geWwse+8geaYr++8geajku+8gQ=='


解码:

text = base64.b64decode(secret)print(text.decode())


Base64 是一种非常经典的文本编码方式,程序员的最爱。在程序员的聚集地 v2ex 上,你会发现大家留的联系方式都是一串乱码,那些基本都用的是 Base64。


Base64有个特征,就是最后常会用 = 进行补齐(但不是一定会有)。另外,它不能直接对中文进行操作,需要先进行文字编码,通常是 UTF8 或者 GBK。其实这一步本身就让肉身无法直接阅读了,比如上述例子的 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'

但对于计算程序来说,这段编码和原文本几乎是一样的。


3. 移位加密


这是一种很古老的加密方式,据说可以追溯到恺撒在战争中传递密信。原理就是把所有字母都往后移动固定的位数,比如 a->d,b->e, c->f,这样原本的话就看不懂了。


对于中文,虽然没有字母这样的概念,但在计算机里同样也是有一个对应的数值,所以用程序去进行位移计算很容易。


text = 'Crossin的编程教室就是棒啊!就!是!棒!'secret = ''key = 5for i in text:    secret += chr(ord(i) + key)print(secret)

输出结果:

Hwtxxns皉缛稐敞宩尶昴棗問&尶&昴&棗&


解码:

text = ''for i in secret:    text += chr(ord(i) - key)print(text)


Python 里,内置函数 ord 是把一个字符转成对应的数值,chr 则是发过来,把数值转成对应的字符。


你可以自定义一个 key,用来进行加密解密的计算(记住不要告诉别人


你也可以每次用一个随机的 key,然后把 key 藏在你的密文中。比如:

N}z~~ty皏缡稖敤宯尼昺棝啕,尼,昺,棝,@11

解密的时候,先提取 key,然后再进行解密。


使用动态随机key的代码不复杂,就留做今天的作业啦!


如果文章对你有帮助,欢迎转发/点赞/收藏~你们的支持是我更新的动力。



_往期文章推荐_

Python3里不存在编码问题?




如需了解付费精品课程教学答疑服务
请在Crossin的编程教室内回复: 666

浏览 11
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报