wargoo

TMD要在这个神奇的国度好好活下去.

 

移位加密解密算法

移位加密算法,是需要有对应的参照(下例中参照为STR_AZ常量),

//可以直接看代码,下面解释繁琐 哈哈....

如果待加密元素值在参照里找到相同的元素值,则取参照里移位后的值作为加密后的值。以此来实现移位;

 1 public class Move {
2 //加密移位参照
3 static final String STR_AZ = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
4 static char[] ssTemp;
5
6 //加密
7 public String encrypt(String s) {
8 StringBuffer ss = new StringBuffer();
9 for (int i = 0; i < s.length(); i++) {
10 char tempi = s.charAt(i);
11 for (int j = 0; j < STR_AZ.length(); j++) {
12 //大于最大位后,从初的A取。形成循环
13 if (tempi == STR_AZ.charAt(j)) {
14 if ((j+3) >= STR_AZ.length()){
15 int z = j+3-STR_AZ.length();
16 ss.append(STR_AZ.charAt(z));
17 }else{
18 ss.append(STR_AZ.charAt(j+3));
19 }
20 }
21 }
22 }
23 return ss.toString();
24 }
25 //解密
26 public String decrypt(String s){
27 StringBuffer ssde = new StringBuffer();
28 for (int i = 0; i < s.length(); i++) {
29 char tempi = s.charAt(i);
30 for (int j = 0; j < STR_AZ.length(); j++) {
31 if (tempi == STR_AZ.charAt(j)) {
32 //小于最小位后,从最大的Z取,形成循环
33 if ((j-3) < 0 ){
34 int z = STR_AZ.length()+(j-3);
35 ssde.append(STR_AZ.charAt(z));
36 }else{
37 ssde.append(STR_AZ.charAt(j-3));
38 }
39 }
40 }
41 }
42 return ssde.toString();
43 }
44
45 public static void main(String[] args){
46 Move move3 = new Move();
47 String s1 = "AYZ";
48 String s2 = "DBC";
49 System.out.println("密码:");
50 System.out.println(move3.encrypt(s1));
51 System.out.println("解密:");
52 System.out.println(move3.decrypt(s2));
53 }
54
55 }

PSa,例子是往后移动3位来加密,遇到参照峰值则移动到头(实现首尾相接循环加/解密);

PSb,解密就是PSa的逆...;

PSc,修改第11行代码如上,省去PSa,和PSb的逻辑,但是当你加密XYZ的时候就会无法获取;

for (int j = 0; j < STR_AZ.length()-3; j++) 

posted on 2011-08-26 23:13  wargoo  阅读(11557)  评论(1编辑  收藏  举报

导航