[code=Asp]
function    mistake(preString)
      Dim texts
      Dim seed
      Dim i,length
      prestring = trim(preString)
      length = len(preString)
      seed = length
      Randomize(length)
      texts = ""      for i = 1 to length
            seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32)
            texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32))
      next    dim dist
    dist=""
    for i = 1 to len(texts)
      if mid(texts,i,1)<>"'"  then
              dist=dist+mid(texts,i,1)
          end if
    next 
    mistake = dist
end function
[/code]

解决方案 »

  1.   

    输入什么,输出什么?有验证的方法吗?其他都好翻译,就是Rnd函数,内核怎么写的。返回一个 Single 类型的随机数。Public Shared Function Rnd[(Number)] As Single
     
    参数
    Number 
    可选。一个 Single 值或任何有效的 Single 表达式。返回值
    如果 Number 为  Rnd 生成  
    小于零
     每次都相同的数字,并将 Number 用作种子。
     
    大于零
     序列中的下一个随机数。
     
    等于零
     最近生成的数字。
     
    未提供
     序列中的下一个随机数。
    大概是这样:
    double rnd(int param)
    {
        return 0; // TODO : 参考内核代码编写
    }public string mistake(string preString)
    {
        preString = preString.Trim();
        int length = preString.Length;
        int seed = length;
        Random random = new Random(length);
        string texts = string.Empty;
        for (int i = 0; i < length; i ++)
        {
            seed = (int)(94 * rnd(-preString[i]) - seed * preString[length - i - 1] + 32);
            texts += (Char)seed + (Char)((int)(94 * rnd(-seed) + 32));
        }
        return texts.Replace("'", "");
    }
      

  2.   

     public string mistake(string prestring) 
            {
          string texts; 
          int seed; 
          int i,length;
          prestring = prestring.Trim();
          length = prestring.Length;
          seed = length;
          Random rand1 = new Random();
          rand1.Next(length);
          texts = "";
          for (i = 1; i <= length; i++)
          {
              seed = 94 * rand1.Next(-prestring.Substring(i, 1)[0]) - seed * prestring.Substring(1, 1)[0] + 32;
          }      string dist;
          dist ="";
          for (i = 1; i <= texts.Length; i++)
          {
              if (texts.Substring(i, 1) != ",")
                  dist = dist + texts.Substring(i, 1);
          } 
          return dist;
            }
      

  3.   

    大概是这样,未经测试:
    public string mistake(string preString) 

        preString  = preString.Trim(); 
        int length = preString.Length; 
        int seed    = length; 
        VBMath.Randomize(length);
        Random r = new Random(seed);
        string texts = ""; 
        for (i = 0; i < length; i++) { 
          seed   = (int)(94 * VBMath.Rnd( -(int)preString[i] - seed * (int)preString[length - 1]) + 32); 
          texts += (char)seed + (char)(int)(94 * VBMath.Rnd(-seed) + 32); 
        }
        string dist = ""; 
        for (i = 0; i < texts.Length; i++) { 
            if (texts[i] != '\'') { 
                dist += texts[i]; 
            } 
        } 
        return dist; 
    }
      

  4.   

    嗯,刚想到直接调用VB函数结了。
    public string mistake(string preString)
    {
        preString = preString.Trim();
        int length = preString.Length;
        int seed = length;
        Microsoft.VisualBasic.VBMath.Randomize(length);
        string texts = string.Empty;
        for (int i = 0; i < length; i ++)
        {
            seed = (int)(94 * Microsoft.VisualBasic.VBMath.Rnd(-preString[i]) - 
                seed * preString[length - i - 1] + 32);
            texts += (Char)seed + (Char)((int)(94 * rnd(-seed) + 32));
        }
        return texts.Replace("'", "");
    }
      

  5.   

    测试之前先在项目中添加Microsoft.VisualBasic引用
      

  6.   

    首先很感谢大家 ! 我说下我的用途避免大家误会 ! 我们公司有套软件早先是ASP做的 使用的就是大家看到的这个加密做的 现在升级到NET了 所有想把以前用户注册的信息导入过来 但是加密这个数据没办法解决所以数据没办法导 ! 现在把我们可急坏了 ! 请各位高手帮忙 !大家的结果我都试过了 不过结果都不对 !112233   生成的结果是 X[+09P6^A/2o 他有一个 ASC编码 ! 谢谢各位 感谢大家的支持分我觉得在加 ! 
      

  7.   

    module testfunction    mistake(preString as string) as string
          Dim texts as string
          Dim seed as integer
          Dim i as integer,length as integer
          prestring = trim(preString) 
          length = len(preString) 
          seed = length 
          Randomize(length) 
          texts = ""       for i = 1 to length 
                seed = int(94*rnd(-asc(mid(preString,i,1))-seed*asc(right(prestring,1)))+32) 
                texts = texts & chr(seed) & chr(int(94*rnd(-seed)+32)) 
          next     dim dist as string
        dist="" 
        for i = 1 to len(texts) 
          if mid(texts,i,1) <> "'"  then 
                  dist=dist+mid(texts,i,1) 
              end if 
        next  
        mistake = dist 
    end function 
    sub main()
    msgbox(mistake("112233"))
    end sub
    end module
    改了一下.在vb.net 下编译没问题.
    输出的结果也符合LZ的要求.
    可以用vb.net编译成一个dll给c#用.
      

  8.   

    网上有C#翻译VB的免费工具,也有VB翻译C# 的收费工具
      

  9.   

    测试通过:
    using Microsoft.VisualBasic;public string mistake(string preString)
    {
        byte[] preBytes = Encoding.Default.GetBytes(preString.Trim());
        byte[] result = new byte[preBytes.Length * 2]; 
        int seed = preBytes.Length, j = preBytes[preBytes.Length - 1];
        VBMath.Randomize(preBytes.Length);
        int i = 0;
        foreach (byte vByte in preBytes)
        {
            seed = (int)(94 * VBMath.Rnd(-vByte - seed * j) + 32);
            result[i++] = (byte)seed;
            result[i++] = (byte)(94 * VBMath.Rnd(-seed) + 32);
        }
        return Encoding.Default.GetString(result).Replace("'", "");
    }
      

  10.   

    非常感谢各位哥们 ! 成功转过来了 给分 !这里特别感谢 ChrisAK 和 goldxinx 兄弟共同提供的思路 ! http://topic.csdn.net/u/20080227/10/68b716b3-c511-4c8f-a518-03755ac5b524.html 这个帖子还有200分 !ChrisAK 和 goldxinx 兄弟可以近来接这个分 !