|
楼主 |
发表于 2019-12-30 19:25:52
|
显示全部楼层
本帖最后由 jyrpxj 于 2019-12-30 19:57 编辑
菜农在另一个贴子的回复 https://www.amobbs.com/thread-5724368-1-1.html?_dsign=c7426135
http://bbs.hotfsp.com/index.php?topic=138.0
在上面视频的后部分菜农有话说~~~
回应如下:
菜农误解了我的加密细节,我详细的说明一下细节
以下介始我的加密算法,这个加密是可逆的,可以凭密解码数据,除此之外,别无他法。
y=f(x,A,B,C1,C2,D) 形如这样的加密。
这里,x是原数据,待加密内容,y是加密后的内容。
这里,A为我的公司名和邮箱信息(将参与偏移、异或运算),B为我的电话号码(将参与偏移、异或运算),C1,C2分别为第M轮,第N轮的运算是哪种运算方式,D为新增于数据中随机数的位置及特征。 等等。
这里,A为16字节到64字节,B为11字节到32字节,C1为1字节,C2为1字节,D为2字节。
那么我的加密复杂度或者说密钥,也是很大的,以上只是举例,我也可以将我的一幅公司彩色LOGO作为A,这样A就是KB到MB级的。当然,依据实际应用,加密函数也可以扩展为y=f(x,A1,A2,A3,B,C1,C2,D,F)等等,以增加加密强度。
即使你已知相当多条的原文x和对应的密文y ,你也很难从其中反推出密钥A,B,C1,C2,D。
加密过程由多轮的移位,取反,交换,偏移,异或,查表代换,插入随机数及特征码,等运算组成,这些步骤全部是可逆的。
现说明:参与加密过程的参数A,B 并非只进行普通的异或,我举一下更详细的例子。你看看能不能将A,B 等效为一个变量Z :
- 现有待加密数据字节型数组X[16],密钥有字节型数组A[16] B[6] ,单字节C1,C2,随机变量及特征码字节型数据D[6] ,其中D[0]~D[3]为随机数,D[4]为前4字节的校验和,D[5]为特征码。
- 好,现在开始进入加密环节 进入f(x,A,B,C1,C2,D) 的运行(共有8轮运算,不含预处理):
- 第一步,预处理,检查位于D中的特征码D[5]%8,即有8个分支,这8个分支决定了不同的运行过程,C语言的话使用switch(D[5]%8){ }语句
- 分支0:将数组A的前2个字节与数组B的前两个字节互换,将数组A的最后1个字节与数组B的最后1个字节互换
- 分支1: 将数组A的每个节字成员加上不同的偏移,如A[0]=A[0]+2; A[1]=A[1]+0; A[2]=A[2]+1; A[3]=A[3]+9; .............
- 分支2:A不变,将数组B中的每个字节成员异或不同位,如 B[0]=B[0]^2; B[1]=B[1]^0; B[2]=B[2]^1; B[3]=B[3]^9; .............
- 分支3:将数组A乱序,这里需要一个与A相同大小的变量M作为暂存,M[0]=A[7]; M[1]=A[4]; M[2]=A[12]; M[3]=A[0]; ........... 然后使A与M相同,即将A乱序了
- 分支4:将数组B中的每个字节成员与随机量D[0]~D[3]进行混合,B[0]=B[0]+D[0]; B[1]=B[1]^D[1]; B[2]=B[2]^D[2]+D[0]; ......
- 分支5:将数组A与数组B部分字节成员交叉互换,A[5]与B[8]互换,A[9]与B[1]互换,.........
- 分支6:将数组A循环右移C1%4 +1位, (即依据C1的值,数组A会循环1到4位)
- 分支7:将数组B循环右移1位,然后每个字节加5
- 前7轮运算:
- for(i=0,i<7;i++) //前7轮运算
- { if(C1%7==i){ X与A异或;} //如果A的长度大于X的长度,舍去A中长出的部分,如果A的长度小于X的长度,A自动重复填充以与X等长。以下相同
- else if(C2%7==i){ X与B相加;} else
- switch(i)
- {
- case 0: X循环右移1位,break;
- case 1: X乱序,break;
- case 2: X每个字节查表代换,break;
- case 3: X与A相加,break;
- case 4: X与B异或,break;
- case 5: X每个字节高4位与低4位交换,break;
- case 6: X每个节节加1,break;
- }
- }
- 第8轮运算,插入随机量与特征码</div><div>
- 前7轮得到新的数组X[16],共16字节长度,</div><div>
- 现将其再扩展6字节,即22节字。</div><div>
- switch(D[5]%4) //共3种扩展方法
- {
- case 0: D[0],X[0], D[1],X[1], D[2],X[2], D[3],X[3], D[4],X[4], X[5],X[6],......X[15],D[5]
- case 1: D[0],X[0], X[1],X[2], D[1],D[2], D[3],X[3], X[4],D[4], X[5],X[6],......X[15],D[5]
- case 2: X[0],X[1], D[0],X[2], D[1],D[2], D[3],X[3], X[4],D[4], X[5],X[6],......X[15],D[5]
- case 3: X[0],X[1], X[2],D[0], X[3],D[1], D[2],X[4], X[5],D[3], D[4],X[6],......X[15],D[5]
- }
- 计算结果Y等于扩展后的数据。加密完成。
- 解码逆运算过程,
- 首先 选提取加密数据中的最后1位, 然后判断第8轮是进行了哪种扩展方法,移除随机数。
- 预处理,预处理,检查位于D中的特征码D[5]%8,即有8个分支,得知加密中的预处理后的A,B 的值
- 然后,再依据前7轮的加密,逆回去, 最后得到原始数据X。
复制代码
注意,我在贴中列出的例子中的switch分支语句中的有多少分支,各个分支的具体内容,不是公开的。比如说,某switch分支语句中有8个分支,某分支上X循环移位1位, 实际中,我也可以是9个分支,某分支循环移位2位。 这对于我来说,是已知的, 对于试图破解者来说是未知的。有多少个分支,对于破解者来说也是未知的。特征码会是藏在密文中的哪个地方,对于破解者来说,也是未知的。 重要的是这种加密的思想
只是举例。 现实中,你是对着一串串加密后的数据,对比原文找规律。
请菜农大师来看看,我这样的加密,你如何将A,B,C1, C2, D 这些合并为Z单一变量?
你如何将我的AMO8848K算法 y=f(x,A,B,C1,C2,D) 等效与你鄙视的y=f(x,Z) ?
其实我已经构思好了宇宙第一的AMO8848KPlus加密算法,它自带嘲讽功能。
(先卖个关子,看回贴情况,反响热烈的话,大赫天下,公开我的鸿篇巨制AMO8848KPlus。)
|
|