十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容介绍了“GlidedSky字体加密的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
成都创新互联公司是一家专业提供通辽企业网站建设,专注与网站设计制作、成都网站设计、H5高端网站建设、小程序制作等业务。10年已为通辽众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
字体加密: 字体文件的本质是,给定字符、字号等参数,输出一组像素点信息,用于在设备上展示。
特别简单一点来说,就是网页上显示数据和你真实获取到的数据,通过某一种关系表连接起来。这样就可以达到 1 是 2, 3 是 7 的效果。我说的都是比较浅显的理解,可以去百度或者 Google 一下。我截个图理解一下。
上面的图应该可以帮助你理解一下。当然这是简单的字体加密。
而现在我们需要拿真实的响应数据,根据对应关系,去匹配页面上你所看到的数据。
其实这个对应关系也就是字体文件,需要找到这个字体文件。
第一步:打开网站,打开 network
打开网页你会看到,你看到的和你拿到的数据并不是一致,所以有时候眼睛看到的也不一定是真的。
而且当你刷新页面的时候,你拿到的数据和上一次也不一样,说明字体文件更新了。所以最好把这 1000 页的 HTML 内容保存下来,方便理解。
找到字体文件:
第二步:就是处理这个字体加密
拿到的是 base64 加密的数据,上面的图圈起来的 base64 后面的,不要把前面的内容也搞出来,解密后保存为 ttf 文件。
至于怎么获取这 1000 页的内容,看你自己
直接上代码:
1 、获取页面的 base64 加密的字体文件。使用的库
import requests
from lxml import etree
import tools
import base64
from fontTools.ttLib import TTFont # 字体解析库
import xml.dom.minidom
from bs4 import BeautifulSoup
f = open(f'page/font-puzzle-{i}.html').read()
soup = BeautifulSoup(f, "html.parser")
html = str(soup.select('style'))
str_base64 = html.split('base64,', 1)[1]
font_face_base64 = str_base64.split(') format', 1)[0]
# base64 解密
b = base64.b64decode(font_face_base64)
# 保存为 ttf 格式的文件
with open('ttfji/{}.ttf'.format(i), 'wb') as f:
f.write(b)
font = TTFont('ttfji/{}.ttf'.format(i))
# 转为 xml 格式文件,并保存
font.saveXML('dictxml/{}.xml'.format(i))
可以使用工具 FontCreator 打开,给大家百度网盘的链接:
链接: https://pan.baidu.com/s/1xzdNQeOUX7JHACpG3CJb_A 提取码: ebcq 复制这段内容后打开百度网盘手机App,操作更方便哦
打开就是这样:
而 xml 文件中是这样:其实是没有 10 的,name 向上对应就是你打开 ttf 看到的。GlyphOrder 中显示的就是对应关系。
而 name 的值代表的数字,就是自己个翻译过来的数字。可以看看 cmap.
也就是这样:该字体加密恰巧数字对应它自己的英文名。每一个字体加密都需要去找 name 对应的 value .
dict = { 'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9', }
到这里基本就理解完了,剩下的就是怎么获取 xml 中的对应关系,就是写代码了。理解了写代码就容易多了。
newdict = {}dom = xml.dom.minidom.parse('dictxml/{}.xml'.format(i))root = dom.documentElementbb = root.getElementsByTagName('GlyphID')for j in range(1, 11): # 下标从 1 开始,获取的是zero, k = bb[j].getAttribute("name") # 在字体文件 xml 中对应关系就是 j-1, 也就是0, zero对应的就是0,注释仅针对第一个字体文件 # 建立对应关系,取出真实的 name 对应的数字。 newdict[dict[k]] = str(j - 1)
“GlidedSky字体加密的方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!