字体解密一问

对于籍合网的字体加密,想不来其它好的解密方法,只能用字形比对法。做法大概是:
一、提取标准字体的unicode码与相应字形信息的md5,构建字典
二、提取加密字体的unicode码与相应字形信息的md5,构建字典
三、拿加密字体的md5逐个与标准字体的md5比对,如果对上,构建解密字体的u码和标准字体u码的映射字典
四、替换加密文字的u码为对应的标准字体的u码
五、其它词条循环上述步骤

但现在问题是字体文件中有些字并没有字形数据,比如空格等,这样在遍历每个字提取字形信息时(font['glyf'].glyphs.get(u).data)会出现AttributeError: 'Glyph' object has no attribute 'data' 错误,请大神指点怎么办,该如何绕过那些没有字形信息的字?

那就跳过。不存在的也就没有加密。

看来hua大用的不是这种笨法子,现在就是跳不过才来问,程序出错,无法运行。
如果用再笨的法子,用字体软件中把这些字删了,或者在程序中把这些字跳过去,标准字体还好说,加密字体那么多,一个一个查看,会把人累死。
另外,能透露一下你用的什么方法吗?

就是 MD5 查询,你都说得挺好的。你应该是哪儿没转过弯。。

构建的字典应该是类似:

{MD5: '真unicode'}

计算加密字体中的 MD5,再在这个字典里面查找,从而得到一个映射字典。然后替换就行了。

{'假unicode': '真unicode'}

难道你想把加密词典的映射反转过来?

问题是每个字的字形信息是如何得到的?用的语句应该不一样。
我是用font = TTFont(字体文件) 打开文件之后,提取u码,然后遍历u码,执行content = font[‘glyf’].glyphs.get(u).data进一步提取每个字的字形信息,就在这一步报错,我试了一下,才发现是因为有空码。现在就是不知道这一步怎么办好。
对FontTools不熟。在还没有将字形信息转换为md5,构建字典前就出问题了。

是啊,别的想不来办法。兄台有高招吗?

from fontTools.ttLib import TTFont
import hashlib

filenames = ["00.TTF","01.TTF","02.TTF"]

hash_maps = {}

for filename in filenames:
    font = TTFont(filename)
    for w in font['glyf'].glyphs:
        item = font['glyf'].glyphs.get(w)

        if hasattr(item, 'data'):
            hex = hashlib.sha224(item.data).hexdigest()
            # print(w, hex)
            if hash_maps.get(hex):
                hash_maps.get(hex).append(w)
            else:
                hash_maps[hex] = [w]

print(len(hash_maps))
4 个赞

多谢大神!我就是卡在不会if hasattr(item, 'data')这一步

unicodeblock.blocks

它有什么用呢,请指点一下,程序中好像也没用到

确实没有用到,忘记用途了,可以去掉。

好的。
字体文件太大,jupyter内存告急。有什么解决办法吗?
在配置文件中把内存限制加大,还是不行,硬件问题,恐怕也没有什么好办法……

每次只处理一个TTF,hash_maps的结果写到txt文件里,要用的时候的时候拼起来。

嗯,多谢! :+1:

<div><p>b\xecng\u85b5\u8eae\u7476\uff0c\u600a\uff0c\u8eae\u73a7\uff0c\u987d\u3002\u8498\u70dc\u3002</p><p>\u8502\u9730\u3002\u642e\u4f40\uff0c\u642e\u95a5\u3002<span class="shuming">\u57b9</span><span class="shuming">\u4f40\u5341</span><span class="shuming">\u8ca2</span>\uff1a\u201c~\u64b5\u6026\u70f3\u60a0\u7e61\u3002\u201d<span class="shuming">\u7579\u5da8</span><span class="shuming">\u4f40\u4f75\u781d</span>\uff1a\u201c\u96be\u8ebc\u84c6\u78e2~\u922c\u3002\u201d<span class="shuming">\u8e8f\u9f75\u7d81</span><span class="shuming">\u5920\u7d81</span>\u8146\uff1a\u201c\u70f3\u8ebc\u6cfa\u8441\u562b\u6743\uff0c\u9a20\u8ebc\u73dd\u7cb0~\u810d\u93cf\u3002\u201d\u5f5c\u8c1f\u9747\u5649\u9730\u3002\u64ab\u9392\u3002<span class="shuming">\u6c00\u5da8</span><span class="shuming">\u947a\u8fce</span>\uff1a\u201c\u6c46\u7cb0~\u9bdf<span class="zhuanming">\u6829</span><span class="zhuanming">\u7741</span>\u3002\u201d<span class="zhuanming">\u7b65</span><span class="zhuanming">\u6e01\u5f46</span><span class="shuming">\u95f9\u80f1</span>\uff1a\u201c\u6296\u5f9f\u6cfa\u7bc3\u63e2\u99d5\u5770\u5da8~\uff0c\u8a9e\u6fef\u7047\u7dcd\u8da8\u7908<span class="shuming">\u652a\u61ea</span>\u3002\u201d</p>          <p>[\u78c2\u61e5]\u7fae\u201c\u964b\u201d\u3002<span class="shuming">\u94b7\u99ec</span><span class="shuming">\u70f8\u92c4\u9945\u8d78\u527a</span>\uff1a\u201c\u5fab<span class="zhuanming">\u6a80</span>\u8e6a\uff5e<span class="zhuanming">\u733e</span>\u7199\u5178\uff0c\u6ed9\u93cf<span class="zhuanming">\u8b96\u5500</span>\u3002\u201d<span class="zhuanming">\u97b0\u97b7</span><span class="zhuanming">\u8180</span><span class="zhuanming">\u5f1b\u583b</span><span class="shuming">\u6e6e\u95f9</span>\u5f5c<span class="zhuanming">\u4fde\u7e4e</span>\uff1a\u201c\u987d\u9a99\u964b\u3002\u964b\uff0c\u6010\u7fb0\u3002\u201d</p>          <p>[\u9041]\u95a5\uff0c\u919b\uff0c\u987d\u3002\u826e\u201c\u95a5\u201d\u6290\u9435\u3002</p>          <p>\u7816\uff0c<span class="shuming">\u6eb9\u995b</span><span><img width="" height="" src="/dictionary/u/cms/www/202008/21132011kw2c.png"></span>\u6290\u8ce1\u6646\u70dc\u3002</p>         </div>  
<div><p>bìng蒲迥切﹐上﹐迥韻﹐並。陽部。</p><p>副詞。⼀⿑﹐⼀併。<span class="shuming">詩</span><span class="shuming">⿑⾵</span><span class="shuming">還</span>﹕“~驅從兩肩兮。”<span class="shuming">莊⼦</span><span class="shuming">⿑物論</span>﹕“昔者⼗⽇~出。”<span class="shuming">戰國策</span><span class="shuming">燕策</span>⼆﹕“兩者不肯相舍﹐漁者得⽽~禽之。”引申爲動詞。平列。<span class="shuming">荀⼦</span><span class="shuming">儒效</span>﹕“俄⽽~於<span class="zhuanming">堯</span><span class="zhuanming">禹</span>。”<span class="zhuanming">漢</span><span class="zhuanming">揚雄</span><span class="shuming">解嘲</span>﹕“僕誠不能與此數⼦~﹐故默然獨守吾<span class="shuming">太⽞</span>。”</p>          <p>[備考]通“傍”。<span class="shuming">史記</span><span class="shuming">秦始皇本紀</span>﹕“⾃<span class="zhuanming">榆</span>中~<span class="zhuanming">河</span>以東﹐屬之<span class="zhuanming">陰⼭</span>。”<span class="zhuanming">南朝</span><span class="zhuanming">宋</span><span class="zhuanming">裴駰</span><span class="shuming">集解</span>引<span class="zhuanming">服虔</span>﹕“並⾳傍。傍﹐依也。”</p>          <p>[辨]併﹐并﹐並。⾒“併”字條。</p>          <p>按﹐<span class="shuming">説⽂</span><span><img width="" height="" src="/dictionary/u/cms/www/202008/21132011kw2c.png"></span>字在竝部。</p>         </div> 
2 个赞