目录
我在博客的“关于”页面里写了我的联系方式,但没有以明文的形式展示,而是写了一行 shell 命令。已经有一些童鞋破解了这道小谜题,添加我为微信好友。我很开心,能认识到志同道合的朋友。
我之所以搞这么一道弯弯绕,不是我装 X,只是怕联系方式被爬虫爬到,或者被搜索引擎错误收录。正如同很多人会藏住自己的邮箱一样:“xxxxx[at]abc.com,把 [at] 换成 @”,初衷是相同的。
出乎我意料的是,大家似乎对这个把微信二维码藏进命令行的小技巧格外感兴趣,很多朋友来问是如何制作的,我总是笼统地回复一句用:“用 qrencode 生成的”,自以为言简意赅,却发现很容易误导人,甚至把一位童鞋带沟儿里去了。所以我决定弥补一下,写一篇如何把微信二维码藏进命令行里的教程。不,“教程”这两个字太严肃了,还是叫“攻略”吧,“游戏攻略”的“攻略”。
以上都是扯皮,下面正式开始。
一
首先,你要准备你的微信二维码,打开微信 APP,找到自己的“二维码名片”,下载图片到本地。
注意,这个下载这个二维码图片只是为了方便提取里面的内容,和生成的命令行里的二维码没有关系。
可以通过一些工具,比如这个网站,提取出二维码图片里的内容:
下面那个扫码结果就是我们要的东西,拷贝下来,为了方便后面继续演示,我们假设内容为:
https://u.wechat.com/EC2fu-y9csQRnUNXXXXXXXX
事实上,这个长得很像网址(只能说”像“,浏览器是打不开这个地址的)的字符串就是“微信二维码名片”的核心内容,你可以用任何工具将其转化为二维码,微信都可以正确扫出来。
二
下面就是比较酷的部分了:基于微信名片内容,生成一个可以在命令行里展示的文本二维码。
这里需要借助一个工具:qrencode
,在各个 linux 发行版或 mac 上都能轻松安装它:
apt-get install qrencode # for ubuntu
yum install qrencode # for centos
brew install qrencode # for macos
这个工具的功能就是将任意字符串生成为二维码图片,而图片的格式你可以任意指定,可以是 PNG、SVG 等,然而酷的地方在于,你还可以指定格式为 ASCII、UTF8 等字符集,举例来说,现在把文本”hello“分别转化为用 ASCII 和 UTF8 字符集组成的二维码:
$ qrencode -t UTF8 hello
█████████████████████████████
█████████████████████████████
████ ▄▄▄▄▄ █▀ █ ▄█ ▄▄▄▄▄ ████
████ █ █ █▄ █▀▄█ █ █ ████
████ █▄▄▄█ █ ██▀ █ █▄▄▄█ ████
████▄▄▄▄▄▄▄█ ▀ ▀ █▄▄▄▄▄▄▄████
████▄ ▀ ▀▀▄ ▀ ▄███ ▄▄█▄ ▀████
██████▄ █ ▄▄ █▄▀▄▄███ ▄▀ ████
████████▄█▄▄▀ ▀▄█▄▀ █▀█▀████
████ ▄▄▄▄▄ █▄ ▀▀ █ ▀▄▄▄█████
████ █ █ █▀▄▀ ██▄ ▄▀▀▀ ████
████ █▄▄▄█ █▀ █▄▀▀█▄█▄█▄████
████▄▄▄▄▄▄▄█▄█▄▄▄██▄█▄█▄█████
█████████████████████████████
█████████████████████████████
$ qrencode -t ASCII hello
############## ## #### ##############
## ## #### ## ## ##
## ###### ## #### ## ## ###### ##
## ###### ## ## ## ## ###### ##
## ###### ## ## ## ## ###### ##
## ## ## #### ## ##
############## ## ## ## ##############
##########
#### ## #### #### ###### ####
########## ###### ## ####
#### ######## ## #### #### ##
## ## ## ## ## ####
## #### #### ## ## ##
######## #### ## ##
############## ###### ## ## ######
## ## ########## ####
## ###### ## ## ## ###### ##
## ###### ## ## #### ## ########
## ###### ## #### ## ## ## ##
## ## ###### ####
############## ## ###### ## ## ##
所以,按照这个套路,我们自然可以很轻松地生成一个用字符组成的微信二维码名片,字符集使用 UTF8 或 ASCII 都可以。
但是我在实际使用中发现,UTF8 组成的二维码虽然识别成功率更高,所需的字符数更少,但有个让人头疼的问题,就是要求终端设置必须是 UTF8 编码,否则显示出的就是乱码。我一开始就是使用 UTF8 格式生成的二维码,然后藏到命令里,神秘兮兮地发给同事,让他执行看看,一副深藏功与名的表情。结果悲剧了,同事的终端设的 GBK,于是一屏幕的乱码和一脸蛋的懵逼就相映成趣了。
退而求其次使用 ASCII 字符集,但识别成功率就要低很多,其由于大多数终端是黑底白字的(是吧?至少我的习惯是这样),而微信扫码时似乎更容易识别出“白底黑字”的二维码。可以转到请客里面看我的支付二维码,都是白底的,是不是?你扫扫看……
所以最终我建议使用 ASCII 字符集进行“反色”生成,选项是 ASCIIi
,操作为:
$ qrencode -t ASCIIi https://u.wechat.com/EC2fu-y9csQRnUNXXXXXXXX
##########################################################################
##########################################################################
##########################################################################
##########################################################################
######## #### ###### ## #### ########
######## ########## ######## ## ## ## ## ########## ########
######## ## ## #### ## ###### ## ## ## ########
######## ## ## ## ## ## #### ## ## ## ## ########
######## ## ## ## ## ## ###### ## ## ## ########
######## ########## #### ###### #### ## ## ########## ########
######## ## ## ## ## ## ## ## ## ########
########################## #### ###### ########################
######## ###### ## ## ## ## ## ######## ##############
###################### #### ######## ## #### ## ##########
######## ######## ## ## ## #### ## ################
############## ###### ## ## ## ## ##############
######## ###### ## ###### ## ###### ## ######## ########
######## ## ######## ## ## #### ## #### ########
########## ## ## ## ###### ## ######## ## ############
###################### #### #### #### ## ## ########
######## #### ## #### ## ###### ## ############
######## #### #### ######## ## ## ## ########
######## ## ## #### ## #### ## ## ## ## #### ########
######## ## ###### ###### #### ######## ## ## ##################
######## ## ## ## #### #### ## ########
######################## ## ## ###### #### ###### ##############
######## ## ######## ## ## ## ############
######## ########## ## ## ## ###### ###### ###### ########
######## ## ## #### #### #### ## ########
######## ## ## #### ########## #### ###### ## ########
######## ## ## #### ## #### ## ## ## ##########
######## ########## ## ## #### ######## ## ########
######## ## ## #### ## ###### ## ############
##########################################################################
##########################################################################
##########################################################################
##########################################################################
三
现在,我们已经获得了一个字符二维码了,下面要做的是把它“藏”到命令里。
可以看到,生成的二维码其实是由大量重复的 # 字符组成的,这就意味着使用 gzip 等工具对其压缩时,压缩效果会非常显著,可以测试一下:
$ qrencode -t ASCIIi https://u.wechat.com/EC2fu-y9csQRnUNXXXXXXXX | wc -c
2775
$ qrencode -t ASCIIi https://u.wechat.com/EC2fu-y9csQRnUNXXXXXXXX | gzip | wc -c
282
可以看到,压缩前是 2775 字节,压缩后是 282 字节,压缩率差不多 10%。
然而,gzip 的压缩结果不是可打印字符集,没有办法在终端里展示,所以需要使用 base64 编码一下:
$ qrencode -t ASCIIi https://u.wechat.com/EC2fu-y9csQRnUNXXXXXXXX | gzip | base64
H4sIAM2lMFwAA92VzQ7CMAyD7zwF0t7/HXdAVf05TsvPDhORhlqWmMR2y3FcFY/LkO4O9UTMb8Zb3ddcg5r4c/1KVaDx1FxAabruan+eu4Qa+/HJDr+AUl4+6oprlntXS66oyvpZKlgjWUJLPdAVC2gEH62CNl2NjlhIkzpcoJ1skb0MErvSIdlLovwtrtIJ1LXOEAdkAnvy8dx7GDApln6ECrdcsUBLVVNyFwes95I7u2MsQiUWqi2qNEXB5CDlK91qsSsOwLE1i3fDAqpq5HbYDOhBY9QOnfTNfcU36XS2A/qwya6ZzcgVFVSHJY81Zuhlzn5zIjZQBKhcba6+qh6LOnk2/zjKlZ+/VsHf4/+hTmqvFZHXCgAA
最终,我们得到了一串 base64 编码的字符串,要还原成二维码,只需要将上述过程进行反向操作即可:
$ echo H4sIAM2lMFwAA92VzQ7CMAyD7zwF0t7/HXdAVf05TsvPDhORhlqWmMR2y3FcFY/LkO4O9UTMb8Zb3ddcg5r4c/1KVaDx1FxAabruan+eu4Qa+/HJDr+AUl4+6oprlntXS66oyvpZKlgjWUJLPdAVC2gEH62CNl2NjlhIkzpcoJ1skb0MErvSIdlLovwtrtIJ1LXOEAdkAnvy8dx7GDApln6ECrdcsUBLVVNyFwes95I7u2MsQiUWqi2qNEXB5CDlK91qsSsOwLE1i3fDAqpq5HbYDOhBY9QOnfTNfcU36XS2A/qwya6ZzcgVFVSHJY81Zuhlzn5zIjZQBKhcba6+qh6LOnk2/zjKlZ+/VsHf4/+hTmqvFZHXCgAA | base64 --decode | gzip -d
##########################################################################
##########################################################################
##########################################################################
##########################################################################
######## #### ###### ## #### ########
######## ########## ######## ## ## ## ## ########## ########
######## ## ## #### ## ###### ## ## ## ########
######## ## ## ## ## ## #### ## ## ## ## ########
######## ## ## ## ## ## ###### ## ## ## ########
######## ########## #### ###### #### ## ## ########## ########
######## ## ## ## ## ## ## ## ## ########
########################## #### ###### ########################
######## ###### ## ## ## ## ## ######## ##############
###################### #### ######## ## #### ## ##########
######## ######## ## ## ## #### ## ################
############## ###### ## ## ## ## ##############
######## ###### ## ###### ## ###### ## ######## ########
######## ## ######## ## ## #### ## #### ########
########## ## ## ## ###### ## ######## ## ############
###################### #### #### #### ## ## ########
######## #### ## #### ## ###### ## ############
######## #### #### ######## ## ## ## ########
######## ## ## #### ## #### ## ## ## ## #### ########
######## ## ###### ###### #### ######## ## ## ##################
######## ## ## ## #### #### ## ########
######################## ## ## ###### #### ###### ##############
######## ## ######## ## ## ## ############
######## ########## ## ## ## ###### ###### ###### ########
######## ## ## #### #### #### ## ########
######## ## ## #### ########## #### ###### ## ########
######## ## ## #### ## #### ## ## ## ##########
######## ########## ## ## #### ######## ## ########
######## ## ## #### ## ###### ## ############
##########################################################################
##########################################################################
##########################################################################
##########################################################################
最后
最后我们来总结一下。
将字符串生成为二维码、再压缩、最后编码:
qrencode -t [ASCIIi 或 UTF8] 信息字符串 | gzip | base64
将编码结果还原成一个字符二维码:
echo 编码结果字符串 | base64 --decode | gzip -d
以上便是全部内容。Have fun and good luck!
祝大家 2019 年工作顺利、学习顺利,bug 更少,money 更多~
评论加载中……
若长时间无法加载,请刷新页面重试,或直接访问。