当前位置: 代码迷 >> Java相关 >> 算法有关问题(java版)
  详细解决方案

算法有关问题(java版)

热度:764   发布时间:2013-02-25 21:47:25.0
算法问题(java版)
String code="757365726e616d653d74657374267369676e3d39363337316431323365333366626263333339356361623839653636346161392673657276657269703d3132372e302e302e3126736572766572706f72743d383538266e7063646f776e6c6f616475726c3d687474703a2f2f3132372e302e302e313a38303831";
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
char[] chs = new char[code.length()];
for (int i = 0; i < code.length(); i++) {
 
int addx = i % 62;
int c = code.charAt(i);
int dx = chars.indexOf(c);
dx += addx;
dx %= 62;
chs[i] = chars.charAt(dx);
}
ret = new String(chs);
System.out.println(ret+" len:"+ret.length());
} catch (Exception ex) {
ex.printStackTrace();
}
out: ret=7696AAD9EnGCIqKKJuPNQQTQVTSXZWaeceeDdEfmhljklqnmsrrqttvw00z0126785A7CABCDEFMHKMKOKQNPVRYWWVZXbZbeagcfmglnkoornttuuxty21vza10335A6j97AnDBErHGINPMQQTPVVWWZVbVcCfbhffGhnjmlrmrsRvpwuyx0a344d6d8iA6CBFEHDIpHsMPPNRPTNRzS6U8XWZZbgcFfdgJjhkNnmpNrxtrv1xw

求解密 算法 谢谢大牛 能来解答

------解决方案--------------------------------------------------------
帮顶 不解释……
------解决方案--------------------------------------------------------
这个很好算啊,反过来算就可以了
for example

Java code
public class Test {    public static void main(String[] args) throws Throwable {        String code="757365726e616d653d74657374267369676e3d39363337316431323365333366626263333339356361623839653636346161392673657276657269703d3132372e302e302e3126736572766572706f72743d383538266e7063646f776e6c6f616475726c3d687474703a2f2f3132372e302e302e313a38303831";                System.out.println("------decode------");        String ret = encode(code); //加密        System.out.println(ret);        System.out.println("------decode------");        ret = decode(ret); //解密        System.out.println(ret);        System.out.println(code.equals(ret)); //测试加密解密后是否和原数据一致    }    public static String encode(String code) { //加密算法,就是LZ的代码抽出来做个方法        String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";        char[] chs = new char[code.length()];        for (int i = 0; i < code.length(); i++) {            int addx = i % 62;            int c = code.charAt(i);            int dx = chars.indexOf(c);            dx += addx;            dx %= 62;            chs[i] = chars.charAt(dx);        }        return new String(chs);    }    public static String decode(String code) { //解密算法,就是加密反过来        String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";        char[] chs = new char[code.length()];        for (int i = 0; i < code.length(); i++) {            int addx = i % 62;            int c = code.charAt(i);            int dx = chars.indexOf(c);            dx -= addx;            if (dx < 0) dx += 62;            chs[i] = chars.charAt(dx);        }        return new String(chs);    }}
------解决方案--------------------------------------------------------
code是源字符串,其中的每个字符,查表决定其对应的目标字符。

查表规则如下:
每个字符,如果在源字符串中是第i个字符,则在码表中找该字符后第i个位置上的目标字符作为替换。
每个源字符对应一个目标字符。

如,第一个字符是7,所以找7后面的第0个字符,就是7自己。
第二个字符是5,所以找5后面的第1个字符,是6。
第3个字符是7,所以找7后面的第2个字符,是9
...
  相关解决方案