import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class fxp {
private static final char[] FlashFXP_Key = "yA36zA48dEhfrvghGRg57h5UlDv3".toCharArray();
public static void main(String[] args) {
String dec = "68A090F010393156BE8AFE58ED"; //密文
String enc = "q13537100***"; //明文
System.out.println("明文:" + enc);
System.out.println("密文:" + encode(enc));
System.out.println("解密:" + decode(dec));
/*
if (args.length == 0) {
System.out.println("Usage:decodeFlashFXP [filename of FlashFXP's Sites.dat]");
System.out.println("");
System.out.println("Press Enter to exit...");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
br.readLine();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return;
}
String filename = args[0];
FileReader fr = null;
try {
fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String s = "";
while ((s = br.readLine()) != null) {
if (s.startsWith("Pass=")) {
String input = s.substring(s.indexOf("=") + 1, s.length());
System.err.println("/"+input+"/");
System.out.println("Pass=" + decode(input));
} else
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("error when open the file:" + filename);
return;
}
*/
}
public static String decode(String input) {
if (input.equals("")||input==null) return "";
StringBuffer result = new StringBuffer();
char[] inputArr = input.toCharArray();
for (int i = 0; i < inputArr.length - 2; i = i + 2) {
String source = "" + inputArr[i + 2] + inputArr[i + 3];
String key = "" + Integer.toHexString((byte) (FlashFXP_Key[i / 2 % 28]));
String magic_number = "" + inputArr[i] + inputArr[i + 1];
int chr = (Integer.parseInt(source, 16) ^ Integer.parseInt(key, 16)) - Integer.parseInt(magic_number, 16);
if (chr < 0) {
chr = chr + 255;
}
result.append((char) chr);
}
return result.toString();
}
public static String encode(String input) {
if (input.equals("") || input==null) return "";
char[] inputArr = input.toCharArray();
int key = (int)(Math.random() * 200)+1;
//int key=0x01;
StringBuffer result = null;
if (key > 0x0F)
result = new StringBuffer("" + Integer.toHexString(key));
else
result = new StringBuffer("0" + Integer.toHexString(key));
int magic_number = Integer.parseInt(result.toString(), 16);
for (int i = 0; i < inputArr.length; i++) {
if (inputArr[i] + magic_number > 0xFF)
magic_number = (inputArr[i] + magic_number - 0xFF) ^ FlashFXP_Key[i % 28];
else
magic_number = (inputArr[i] + magic_number) ^ FlashFXP_Key[i % 28];
if (magic_number > 0x0F)
result.append(Integer.toHexString(magic_number));
else
result.append("0" + Integer.toHexString(magic_number));
}
return result.toString().toUpperCase();
}
}
原作者已经找不到了,漫天的互联网被转载的没头绪了,在这里感谢原作者。
FlashFXP密码java加密解密算法
最新推荐文章于 2022-05-02 06:01:25 发布