FlashFXP密码java加密解密算法
来源:互联网 发布:js导出csv文件 编辑:程序博客网 时间:2024/05/14 19:00
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(); }}
原作者已经找不到了,漫天的互联网被转载的没头绪了,在这里感谢原作者。