private bool checkLicense()
    {
      string str = "";
      try
      {
        int j = m_sLicenseKey.Length - 1;
        for (int i = 0; i <= j; i += 2)
        {
          long l = LongType.FromString(String.Concat("&H", m_sLicenseKey.Substring(i, 2)));
          str = String.Concat(str, StringType.FromChar(Strings.Chr((int)(l ^ 15))));
        }
        if (StringType.StrCmp(str.Substring(0, 4), "EDIT", false) != 0)
        {
          bool flag = false;
          return flag;
        }
        if (IntegerType.FromString(str.Substring(6, 2)) < 40)
        {
          flag = false;
          return flag;
        }
        return true;
      }
      catch (Exception e)
      {
        ProjectData.SetProjectError(e);
        flag = false;
        ProjectData.ClearProjectError();
        return flag;
      }
    }

解决方案 »

  1.   

    int j = m_sLicenseKey.Length - 1;
            for (int i = 0; i <= j; i += 2)
            {
              long l = LongType.FromString(String.Concat("&H", m_sLicenseKey.Substring(i, 2)));
              str = String.Concat(str, StringType.FromChar(Strings.Chr((int)(l ^ 15))));
            }这一段既是加密算法,又是解密算法。算两遍就会得到原始值。
      

  2.   

    string m_sLicenseKey = "1A2B3C4D";
    string str = "";
    int j = m_sLicenseKey.Length - 1;
    for (int i = 0; i <= j; i += 2)
    {
    long l = LongType.FromString(String.Concat("&H", m_sLicenseKey.Substring(i, 2)));
    str = String.Concat(str, StringType.FromChar(Strings.Chr((int)(l ^ 15))));
    }
    // 下面解密:
    string str2 = "";
    j = str.Length - 1;
    for (int i = 0; i <= j; i++)
    {
    int l = str[i] ^ 15;
    str2 = String.Concat(str2, l.ToString("X"));
    }
    Console.WriteLine(str2);