分析midea0978的《一个C#算法分析求解》(一)

先引用midea0978兄的原文,希望midea0978兄不要介意^_^

最近碰到这样一个算法,过程并不复杂,但是思考了很久也没有找到对应的逆运算算法,这里发布出来,希望有高人能够提供思路,
如果有具体的代码实现就最好了。
实现public static String ReCalc(byte[] buffer1)方法,保证
if(text==text1) Console.WriteLine("ok");
就可以了

分析midea0978的《一个C#算法分析求解》(一) 1String text="5UYTSHZ0PL4Q3RB26FD";
分析midea0978的《一个C#算法分析求解》(一) 2byte[] mydata=new byte[12];
分析midea0978的《一个C#算法分析求解》(一) 3calc_1(text,mydata);
分析midea0978的《一个C#算法分析求解》(一) 4String text1=ReCalc(data);
分析midea0978的《一个C#算法分析求解》(一) 5if(text==text1) Console.WriteLine("ok");
分析midea0978的《一个C#算法分析求解》(一) 6
分析midea0978的《一个C#算法分析求解》(一) 7//实现下面方法,满足上面条件
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)
 8public static String ReCalc(byte[] buffer1)分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一) 9    return "";
分析midea0978的《一个C#算法分析求解》(一)10}

分析midea0978的《一个C#算法分析求解》(一)11
分析midea0978的《一个C#算法分析求解》(一)12public static void Calc(string text1, byte[] buffer1)
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)13分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一)14      ushort num1 = 11;
分析midea0978的《一个C#算法分析求解》(一)15      uint num2 = 0;
分析midea0978的《一个C#算法分析求解》(一)16      uint num3 = 0;
分析midea0978的《一个C#算法分析求解》(一)17      int num4 = 0;
分析midea0978的《一个C#算法分析求解》(一)18      while ((num2 < buffer1.Length) && (num3 < 90))
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)19      分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一)20            uint num5 = CalcNum(text1[num4++]);
分析midea0978的《一个C#算法分析求解》(一)21            if (num5 == 0xffff)
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)22            分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一)23                  throw new Exception("Error");
分析midea0978的《一个C#算法分析求解》(一)24            }

分析midea0978的《一个C#算法分析求解》(一)25            num5 = num5 << (num1 & 0x1f);
分析midea0978的《一个C#算法分析求解》(一)26            buffer1[num2] = Convert.ToByte(buffer1[num2] | ((num5 & 0xff00) >> 8));
分析midea0978的《一个C#算法分析求解》(一)27            buffer1[num2 + 1] = Convert.ToByte(buffer1[num2 + 1] | (num5 & 0xff));
分析midea0978的《一个C#算法分析求解》(一)28            if (num1 < 8)
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)29            分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一)30                  num1 += 3;
分析midea0978的《一个C#算法分析求解》(一)31                  num2++;
分析midea0978的《一个C#算法分析求解》(一)32            }

分析midea0978的《一个C#算法分析求解》(一)33            else
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)34            分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一)35                  num1 -= 5;
分析midea0978的《一个C#算法分析求解》(一)36            }

分析midea0978的《一个C#算法分析求解》(一)37            num3 += 5;
分析midea0978的《一个C#算法分析求解》(一)38      }

分析midea0978的《一个C#算法分析求解》(一)39}

分析midea0978的《一个C#算法分析求解》(一)40
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)41public static uint CalcNum(char c)分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一)42    String data="6HC3QBW9K2FUL8XJ4P0TN5DEAZ1YR7VG";
分析midea0978的《一个C#算法分析求解》(一)分析midea0978的《一个C#算法分析求解》(一)43    for(int i=0;i<data.Length;i++)分析midea0978的《一个C#算法分析求解》(一){
分析midea0978的《一个C#算法分析求解》(一)44        if(data[i]==c) return (uint)i;
分析midea0978的《一个C#算法分析求解》(一)45    }

分析midea0978的《一个C#算法分析求解》(一)46    return 0xffff;
分析midea0978的《一个C#算法分析求解》(一)47}


上面是原文,我对midea0978的《.net平台的RSA实现以及与Delphi之间的互操作性》非常感兴趣,看到他求这算法的分析,就试着看了。一看下来,就是20多小时……
后面我慢慢把分析过程发上来。

我不相信神话,我只相信汗水!我不相信命运,我只相信双手!
分类: 逆向

本文转自大石头博客园博客,原文链接:http://www.cnblogs.com/nnhy/archive/2007/12/01/979582.html,如需转载请自行联系原作者
上一篇:【活动回顾】Edge X Kubernetes,探索云原生新边界


下一篇:【工业串口和网络软件通讯平台(SuperIO)教程】五.二次开发图形显示界面