聊胜于无 Java之Caesar与Vigenere实现 (三)

2014-11-24 03:07:52 · 作者: · 浏览: 2
return (int)((temp * seedA + seedB) & 0x7fffffffL);
}

public String chaos(String data, int seed, int cnt) {
StringBuffer buf = new StringBuffer(data);
char tmp; int a, b, r = data.length();
for (int i = 0; i < cnt; i += 1) {
seed = seed(seed); a = seed % r;
seed = seed(seed); b = seed % r;
tmp = buf.charAt(a);
buf.setCharAt(a, buf.charAt(b));
buf.setCharAt(b, tmp);
}
return buf.toString();
}
public String crypto(boolean reverse,
String key, String text) {
String ret = null;
StringBuilder buf = new StringBuilder();
int m, k, s = table.length(),
e = text.length(),
ke = key.length();

for(int i = 0; i < e; i += 1) {
m = dict(text.charAt(i), reverse);
k = dict(key.charAt(i % ke), false);
if (m < 0 || k < 0) break;
m = m + k + i;
buf.append(dict(m % s, reverse));
}
if (buf.length() == e)
ret = buf.toString();
return ret;
}
public String encode(String key, String text) {
return crypto(false, key, text);

}
public String decode(String key, String text) {
return crypto(true , key, text);
}
public static void main(String[] args) {
Vigenere vigenere = new Vigenere();
String data = vigenere.encode("BELLASO", "APPLE");
vigenere.decode("BELLASO", data);
}
}
话说,Vigenere加密算法传入的密钥到不是一个数字,是一个字符串。这个字符串中所用的字符,必须在替换表中出现过的。总的来说,Vigenere的强度要比Caesar强一些。但是终究还是会被破解的。不过,Vigenere有机会成为强度相当高的一种加密手段,前提是~前提是你的密钥长度大于或等于明文长度。然而,在实际应用中,这个密钥总是小于明文长度的。
4 总结
总的来说,理解这两个加密算法都不算太难。对于密码学大牛来说,这简直是小儿科了。两个算法有许多地方都是公用的,只是在一些地方有少许不同。在开发中,可以根据自己的喜好选择一下。不要期待这两个加密算法能有多大的抗破解强度,但是,作为一个烟雾弹掩盖一下明文还是可以的。不过,如果你要将这个加密算法反复对一组明文加密的话,你最好自己再测试一下。因为,加密次数多了,出来的不一定是一个强度高的密文,也可能会是明文本身,切记切记。
另外,有些人可能会想,那如果我要加密的是中文或者二进制数据,是不是要建立一个超大的密码表,比如把中文字符集放进去?我想说的是,这个加密算法强度不是很高的,如果你非有这个需求,要上身穿着阿玛尼,脚上穿着丁子拖加裤衩,那也是可以的,方法就是用Base64把你的数据转一下码。剩下的就是传一个包含那64个字符的转换表。建议"="符号不要加密。
就像我题目所说的,聊胜于无。有时候,有条裤衩穿着出门,总比一丝不挂的出门要好。前者,你最多是被人说不太文明。而后者,你却铁定要被请去喝茶的。我实现这两个密码最主要的现实意义也在于此,最后,感谢你能坚持看到文章的末尾,如果你有什么疑问或者想法,希望你能告诉我,我也很乐意与你交流。

--------------------------------------------------------------------------------

Footnotes:
1Struts2 + Spring + Hibernate

摘自 北斗星君的专栏