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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值