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