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();
     }
    }

  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2485757.html
Copyright © 2011-2022 走看看