有的网站做了简单的数据加密,其实他的对应码就在返回的json数据里,需要我们自己把他翻译过来:
basiceps: "."
这里面的开头的就是被加密了的数值,编码在哪里呢?
仔细对照一下,是不是0-9的编码对照表。
翻译过来就是:0.04
其实我们就是需要自己编写一个解码器,逐个的把里面的数值翻译过来就好了。
JSON数据放到Power Query中就是一个记录:
我们分成两个部分:
密码本部分,就是这样的一个记录列表,
S= T[font][FontMapping]
加密过的数据:
也是一个记录列表,我们展开数据,就得到有明文和密文组成的数据:
我们找一个有代表性的数值:既有负号又有小数点的
-.
用这个字符串作为数据源,编写解码函数。这个数据有两个规律:
我们在解码处理的时候会用到这个两个规律。
第一步:把这个字符串拆分开,用分号做分隔符:函数Text.Split
=Text.Split("-.",";")
第二步:我们区分是否含有符号,做一个循环判断:
第三步:分别处理数字与带符号数字
S就是我们做好的密码本
数字,长度等于7的:
List.RemoveNulls(
List.Transform(S,(y)=>if x&";"=y[code] then Text.From(y[value]) else null))
x就是一个数字的编码,我们字符串拆分的时候把分号给弄没了,这个时候要比较就在加上一个分号,y[code]就是密码本里的密码,y[value]就是密码本中的明文,如果找到对应的数据就显示明文,没找到就null,最后用List.RemoveNulls清除null,这样的到的结果是一个值得列表。
带符号数字,长度不等于7的:
List.RemoveNulls(
List.Transform(S,(y)=>if Text.End(x,7)&";"=y[code] then Text.Start(x,1)&Text.From(y[value]) else null ))
从右侧取7位,加上分号与密码比较,如果匹配上了,就显示左侧的一位符号与明文,否则null,外层去除null。
运行后的效果:
第四步:组合
这样单个密码,就被翻译出来了
第五步:生成函数
可能有些看不清楚:
let
源 = (t,S) => Text.Combine(List.Union(List.Transform(Text.Split(t,";"),
(x)=>if Text.Length(x)=7
then (List.RemoveNulls(List.Transform(S,(y)=>if x&";"=y[code] then Text.From(y[value]) else null)))
else (List.RemoveNulls(List.Transform(S,(y)=>if Text.End(x,7)&";"=y[code] then Text.Start(x,1)&Text.From(y[value]) else null ))))))
in
源
我们这个解码器有两个参数:
我们只需要用t替换掉“-.”就可以了,S原来也是用的引用S,不用做修改。
当然这两个S的含义是不同的,自定义函数中的这个S就是一个参数,并没有实际值,密码本S是一个实际的列表。
因为我们在解码时,这个密码本也是随着网页内容变化的,所以参数化以后,可以逐行引用处理数据。
我们直接展开数据源,会得到一个表格:接着展开List得到多行的表格,提取记录中FontMapping就是对应的密码本:
我们添加一列:
能够正确的把密文翻译过来。
以上就是对有对照表的数据解码过程。
页面更新:2024-03-18
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号