论字节集加&密 #4 字节集分解

上期我们讲了关于字节集的修改,字节集在易语言中属于很奇特的存在,因为它的修改方法很多,而且还可以和文本一样进行分割、左右端处理等,以下是常用的一些处理字节集的命令;
取字节集长度()‘返回字节集的长度,每个字节成员占一个长度’
取字节集左边()‘和取文本左边一样,取得这个字节集左边的指定数量长度的字节成员’
取字节集右边()‘和取文本右边一样,取得这个字节集右边指定数量的字节成员’
取字节集中间()‘通过指定的开始位置和数量,取得一段字节集’
分割字节集()‘和分割文本一样,使用一段字节集作为分割段,并返回字节集数组’
通过上面这些命令便可以对字节集进行大量操作,当然这些是要结合第三期的计算公式,才能展现出更加厉害的加密操作,下面开始进行一些简单的使用;
首先是取字节集长度,这个命令很多情况下用在循环体中,例如我们需要将一个字节集的所有字节成员进行+1操作,那么可以使用一个循环体并且设定一个记录变量X,那么这样接下来的操作就很简单,首先在循环体的循环次数写上,取字节集长度(字节集),因为长度的返回值是整数型,所以不会报错,随后在循环体内 字节集 [X] = 字节集 [X] + 1 ,这样一个简单的字节集加密就形成了,当然反过来也很简单,比如再次使用循环,但操作不是+1,而是-1,这样得到的字节集就是一开始的,那么字节集+1的操作是有限制的,根据第一期里面我们可以在知道,字节集的范围是在0-255,而+1的范围是1-256,而256会使字节溢出导致无效,所以我们在加密前需要弄明白一个范围,不然我们的数据就会有所损坏,比如一开始字节集是{0,25,255} 第一次加密之后因为第三位字节溢出导致结果变为 {1,0,0,0,26,0,0,0,0,1,0,0} 具体为什么可以去看第二期,这就导致存储位全部变为了4字节的数据,这样我们反过来解密就会很困难,而预防这种加密带来的错误我们就需要从根源上解决,+1会使所有255的字节段损坏,那么我们使用别的方法,这种方法可以按需求来,比如如果你的字节集内是没有254和253段的,我们就将所有255段操作-1,这样得到的结果就会是254,之后我们将解密代码中添加遇到254段+1操作,这样特异性的操作可以免除对某指定的字节集的加解密,当然是要有个前提的,就是字节集中不会出现重叠计算,否则数据的还原性也会确实,加解密的保障首要就是不要让数据损坏。
取字节集的左边或右边这种命令很多时候也会用到,例如:在处理某指定字节集的时候,我们需要一种新的算法,比如将字节集的前段部分与后段部分调换,就比如一个长度为10的字节集,我们先取出前段的5个长度的字节集,然后取出后段的5个字节集,随后将后段字节集+前段字节集,这样颠倒的字节集就做出来了,那么解密也会很简单,那就是再运算一次,将原本为后段的前段转换到后段,再将原本为前段的后段转换到前段,这样就得到的原本的,当然如果有其他的转换可能就无法再运算一次就得出原本的,而是需要针对一系列的转换,倒着来,比如先转换中段的某些地方,后转换前段的某些地方,那么解密的话就需要先转换被转换到某地方的原本的前段,最后再转换某地方的原本的中段,这样的运算可能比较复杂,但基础原理是和魔方的理论是一样的,不过魔方更加的随机应变,因为魔方的目的只有一个,而且含有颜色对照,所以相对而言,魔方比这个运算要简单。
字节集的取中间就比较冷门,因为这个命令他是从字节集的某一开始位置,读取指定长度的字节集,而并不是根据前边是某字节集,后面是某字节集的方式读取,所以在很多时候这到命令用到的其实不多,字节集的取中间共有三个参数,分别是用于对照的取出字节集、中间字节集的开始位置以及读取的数量,例如有个字节集:{0,1,2,3,4,5,6,7,8,9,10} 这个字节集的长度是11,我们要获取1-5的地方,也就是说去掉开头和结尾的那部分,这时候我们使用取中间将第一个参数填入我们的这个字节集,第二个参数填入1的开始位置,也就是2,然后第三个参数填入1-5的长度,也就是5,这时候函数返回的字节集值就会是:{1,2,3,4,5} 。
分割字节集起到的作用可大可小,分割字节集的使用方法和分割文本的使用方法一样,比如我们需要将一段字节集:{10,10,10,12,10,10,10,10,12,10,10,10,10,12} 从12的地方分开,然后拼合得到我们想要的字节集,我们就需要使用分割命令,首先将参数一填入我们的这个字节集,然后参数二填入{12} ,返回数目可以不填,然后定义一个字节集数组,并且将其赋值为分割字节集的函数返回值,随后可以使用循环体拼合这段字节集数组的数据,也可以使用数量,慢慢拼合,这里我们先抛弃掉循环体的优势,使用手动拼合,从上面的原字节集可以看出会被分割为三个成员,我们定义一个普通的字节集变量,然后将其赋值为:字节集数组 [1] + 字节集数组 [2] + 字节集数组 [3] ,这样我们得到的就是去除{12}之后的字节集,也就得到我们的目标字节集 {10,10,10,10,10,10,10,10,10,10,10} 这里是使用的分割{12}进行的演示,实际我们可以使用更多的字节集段进行分割,比如 {12,12,12,12} 。
上面讲述的运算方法都各有各的优缺点,总结一下,取长度属于常用到的,取左右边可以做到的是原长度不变,可以打乱顺序,取字节集中间和取左右边结合使用更佳,分割字节集可以作为后期处理。