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

逆运算算法探讨
本文讨论了一个特定的字符串到字节数组的转换算法,并寻求其逆运算算法的实现。通过分析提供的代码片段,作者尝试寻找一种方法将原始字符串正确还原。

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

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

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

11
12
public   static   void  Calc( string  text1,  byte [] buffer1)
13 {
14      ushort num1 = 11;
15      uint num2 = 0;
16      uint num3 = 0;
17      int num4 = 0;
18      while ((num2 < buffer1.Length) && (num3 < 90))
19      {
20            uint num5 = CalcNum(text1[num4++]);
21            if (num5 == 0xffff)
22            {
23                  throw new Exception("Error");
24            }

25            num5 = num5 << (num1 & 0x1f);
26            buffer1[num2] = Convert.ToByte(buffer1[num2] | ((num5 & 0xff00>> 8));
27            buffer1[num2 + 1= Convert.ToByte(buffer1[num2 + 1| (num5 & 0xff));
28            if (num1 < 8)
29            {
30                  num1 += 3;
31                  num2++;
32            }

33            else
34            {
35                  num1 -= 5;
36            }

37            num3 += 5;
38      }

39}

40
41
public   static   uint  CalcNum( char  c) {
42    String data="6HC3QBW9K2FUL8XJ4P0TN5DEAZ1YR7VG";
43    for(int i=0;i<data.Length;i++){
44        if(data[i]==c) return (uint)i;
45    }

46    return 0xffff;
47}


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值