.Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法
2004-11-27 02:40
555 查看
参阅 CCFer & TLFer : kanbol 的 Java 代码翻译修改而成:
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();
}
}
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();
}
}
相关文章推荐
- C#使用CDO发送邮件
- C#多线程编程实例实战
- IDesign C#编程规范
- Visual C#实现自定义组件的设计
- C#中调用Windows API的要点 选择自 yiruoyun 的 Blog
- C#中对ActiveX控件的调用
- C#属性编程(二)
- 使用c#+(datagrid控件)编辑xml文件
- C#中使用Excel
- P2P之UDP穿透NAT的原理与C#实现
- C#调用脚本的实现
- Hello ! Every one! I am a new comer in C#
- 天天学C#-委托(delegate)
- C#中的多線程
- C#網絡編程
- 设计模式-简单工厂模式(SimpleFactory-C#)
- 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
- C#中调用Windows API的要点
- Inside C#_Chapter1_3
- C# 项目部署需要注意的地方