zoukankan      html  css  js  c++  java
  • .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法

    参阅 CCFer & TLFer : kanbolJava 代码翻译修改而成:
    kanbol 说: 之前在TLF写过一个程序自动更新flashfxp的地址簿,也就是修改sites.dat文件
    现在这里贴出flashfxp的加解密算法,顺便说一下sites.dat文件的结构
    算法可见下面的代码,
    sites.dat文件结构比较简单,用ultraedit直接打开的话,是看到一个文本文件
    转换成十六进制编辑模式就能看到一点不同了
    一个站点名,包括其目录名都在一个"[]"中,例如目录abc下的子目录def下的站点sitename

    //C# Code:
    //using System;
    //using System.Text;

    public class Class1
    {
     private static char[] key = "yA36zA48dEhfrvghGRg57h5UlDv3".ToCharArray();
     public static void Main()
     {
      System.Console.Out.WriteLine(Decode(Encode("password")));
      System.Console.Out.WriteLine(Decode(Encode("Microshaoft")));
      System.Console.Out.WriteLine(Decode(Encode("FlashFXP")));
      System.Console.Out.WriteLine(Decode(Encode("flashFXP")));
     }
     
     public static string Decode(string x)
     {
      System.Text.StringBuilder sb = new System.Text.StringBuilder();
      char[] ca = x.ToCharArray();
      for (int i = 0; i < (ca.Length - 2); i += 2)
      {
       string s1 = "" + ca[i + 2] + ca[i + 3];
       string s2 = "" + System.Convert.ToString((byte) key[(i / 2) % 13], 16);
       string s3 = "" + ca[i] + ca[i + 1];
       int m = (System.Convert.ToInt32(s1, 16) ^ System.Convert.ToInt32(s2, 16)) - System.Convert.ToInt32(s3, 16);
       if (m < 0)
       {
        m += 255;
       }
       sb.Append((char) ((short) m));
      }
      return sb.ToString();
     }

     public static string Encode(string x)
     {
      char[] ca = x.ToCharArray();
      int k = new System.Random().Next(255);
      System.Text.StringBuilder sb = null;
      if (k > 15)
      {
       sb = new System.Text.StringBuilder("" + System.Convert.ToString(k, 16));
      }
      else
      {
       sb = new System.Text.StringBuilder("0" + System.Convert.ToString(k, 16));
      }
      int m = System.Convert.ToInt32(sb.ToString(), 16);
      for (int i = 0; i < ca.Length; i++)
      {
       if ((ca[i] + m) > 255)
       {
        m = ((ca[i] + m) - 255) ^ key[i % 13];
       }
       else
       {
        m = (ca[i] + m) ^ key[i % 13];
       }
       if (m > 15)
       {
        sb.Append(System.Convert.ToString(m, 16));
       }
       else
       {
        sb.Append("0" + System.Convert.ToString(m, 16));
       }
      }
      return sb.ToString().ToUpper();
     }
    }

  • 相关阅读:
    OleView.exe:查看机器上的COM 组件。
    COM中导出GUID
    进程外组件以及进程间通信方式
    拼接多个 wchar_t *
    wstring to wchar_t*
    BSTR
    GetProcAddress 使用注意事项
    C++和.net的集合类对应
    COM的一些基本概念
    Error Lookup工具
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2485757.html
Copyright © 2011-2022 走看看