今天,我们来说说,拿到一段通过零宽字符隐藏了信息的字符串,我们怎么阅读被隐藏的信息。
例如下面这个字符串:
一日一技是一个每天更新的栏目,希望做到在每天几分钟让你获得提高。
人眼能够正确阅读,但如果我们把它粘贴到 Jupyter里面,大家就能发现零宽字符的踪迹,如下图所示:
在上一篇文章中,我们提到可以使用零宽字符8204代替1,8205代替0,那么,现在我们只需要使用字符串的.replace()方法,就能反向替换回来,如下图所示:
有了这些二进制数以后,我们就能把他们先转成十进制数,然后再转成汉字,如下图所示:
现在,我们想把这个过程自动化。实现一段代码,依次遍历字符串中的每一个字符,发现连续由8204和8205构成的字符串,就把它存起来,直到遇到一个普通字符。拿到每一串由零宽字符构成的字符串以后,把它们分别先替换成字符串形式的二进制数,然后使用int函数转成十进制数,再使用chr函数转成普通的字符。
这个逻辑的代码实现如下图所示:
- sentence = ' 一日一技是一个每天更新的栏目,希望做到在每天几分钟让你获得提高。'
- char_1 = chr(8204)
- char_0 = chr(8205)
- hide_word_start = False
- hide_word = ''
- hide_word_list = []
- for char in sentence:
- if char not in [char_1, char_0]:
- if not hide_word_start:
- continue
- else:
- hide_word_list.append(hide_word)
- hide_word = ''
- hide_word_start = False
- else:
- hide_word += char
- if not hide_word_start:
- hide_word_start = True
- code_book = {}
- for word in hide_word_list:
- if word in code_book:
- continue
- word_in_1_0 = word.replace(chr(8204), '1').replace(chr(8205), '0')
- real_word = chr(int(word_in_1_0, 2))
- code_book[word] = real_word
- for hide_word, real_word in code_book.items():
- sentence = sentence.replace(hide_word, real_word)
- print(sentence)
运行效果如下图所示:
本文转载自微信公众号「未闻Code」,可以通过以下二维码关注。转载本文请联系未闻Code公众号。
近日,据外媒报道,开发《赛博朋克2077》、《巫师》系列游戏的波兰开发商CD Proj...
Palo Alto 对近些年 DNS 历史漏洞的整理分析(上) 新缓解措施 已实现的明显缓解措...
如今微信和支付宝支付都已经深入到人们生活的方方面面,无论是早上起来买个早餐...
2020年7月,谷歌安全研究人员向高通报告了一个高通芯片集漏洞,攻击者利用该芯片...
2020作为以数字化为主的新时代开端,不仅央行数字货币(CBDC)正式进入国际金融...
回顾2020年,我们看到了macOS攻击者策略发生了许多改变。这些措施包括转换为Shel...
区块链和加密货币是一个吸引来自世界各地的人们的话题。每天投资加密货币的人数...
比特币的价值在历史上一直很不稳定。例如,在截至2021.2月1~7日的7天内,在这期...
在过去的一年多,数字货币在新闻和投资者眼中都尤为突出,同时也存在很多的障碍...
继前不久深圳试点数字人民币之后,苏州、成都很快也要跟进了,今年的双12苏州购...