介紹兩種密碼加密的方法:
這兩種很常見可以再百度隨意找到。
1.摩斯密碼;說道密碼加密不得不提的方法。很是經典。
首先說一下他的對照表,直接上圖。
核心思想就是替換明文密碼,將字符對應的替換成-與.兩種符號的組合;
2、柵欄密碼;
所謂柵欄密碼,就是把要加密的明文分成N個一組,然後把每組的第1個字連起來,形成一段無規律的話。 不過柵欄密碼本身有一個潛規則,就是組成柵欄的字母一般不會太多。(一般不超過30個,也就是一、兩句話)
這個沒有什麼好說的了,舉個栗子:對明文ASDFGHJKL進行加密;分成兩組:基數位置一組,偶數位置一組。然後兩組合並成ADGJLSFHK;
我對這兩種加密方式進行了結合,對一個明文密碼進行了三重加密:第一層柵欄一次,第二層在柵欄一次,第三層在一次摩斯加密;
先是柵欄部分:
1 /*柵欄解密解密類*/ 2 public class Fence { 3 /*加密部分*/ 4 public String encryption (String password){ 5 String p = new String(); 6 String p1 = new String(); 7 String p2 = new String(); 8 for (int i = 0; i < password.length(); i++){ 9 if(i%2 == 0) 10 p1 += p.valueOf(password.charAt(i)); 11 else 12 p2 += p.valueOf(password.charAt(i)); 13 } 14 return p1+p2; 15 } 16 /*解密部分*/ 17 public String decode(String FencePassword){ 18 String password = new String(); 19 String p = new String(); 20 String p1 = FencePassword.substring(0, FencePassword.length()/2); 21 String p2 = FencePassword.substring(FencePassword.length()/2); 22 int i; 23 for (i = 0; i < p1.length(); i++){ 24 password += p.valueOf(p1.charAt(i)) + p.valueOf(p2.charAt(i)); 25 } 26 if(FencePassword.length()%2 != 0) 27 password += p.valueOf(p2.charAt(i)); 28 return password; 29 } 30 }
然後是摩斯部分:
這一部分比較繁瑣,在於摩斯密碼與符號之間的匹配問題上,想著用一個數組去存儲,然後循環進行匹配;但是我是一個不怕麻煩只求簡單的一個人,就進行了一個個的比較;
然後在摩斯加密解密的時候進行了兩次的柵欄加密解密;這樣用到加密解密的時候只要調用摩斯類的加密解密函數即可。
1 /*摩斯加密解密類*/ 2 import java.util.StringTokenizer; 3 4 public class Morse { 5 /*摩斯密碼與字符之間的匹配常量*/ 6 final String A = ".-"; 7 final String B = "---."; 8 final String C = "-.-."; 9 final String D = "-.."; 10 final String E = "."; 11 final String F = "..-."; 12 final String G = "--."; 13 final String H = "...."; 14 final String I = ".."; 15 final String J = ".---"; 16 final String K = "-.-"; 17 final String L = ".-.."; 18 final String M = "--"; 19 final String N = "-."; 20 final String O = "---"; 21 final String P = ".--."; 22 final String Q = "--.-"; 23 final String R = ".-."; 24 final String S = "..."; 25 final String T = "-"; 26 final String U = "..-"; 27 final String V = "...-"; 28 final String W = ".--"; 29 final String X = "-..-"; 30 final String Y = "-.--"; 31 final String Z = "--.."; 32 final String $0 = "-----"; 33 final String $1 = ".----"; 34 final String $2 = "..---"; 35 final String $3 = "...--"; 36 final String $4 = "....-"; 37 final String $5 = "....."; 38 final String $6 = "-...."; 39 final String $7 = "--..."; 40 final String $8 = "---.."; 41 final String $9 = "----."; 42 final String period = ".-.-.-"; // . 43 final String colon = "---..."; // : 44 final String comma = "--..--"; // , 45 final String semicolon = "-.-.-."; // ; 46 final String question = "..--.."; // ? 47 final String equal = "-...-"; // = 48 final String doubleQuotation = ".-..-.";// " 49 final String singleQuotation = ".----.";// ' 50 final String slash = "-..-."; /// 51 final String exclamation = "-.-.--"; // ! 52 final String hyphen = "-....-"; // - 53 final String underscore = "..--.-"; // _ 54 final String lroundBrackets = "-.--."; // ( 55 final String rroundBrackets = "-.--.-"; // ) 56 final String $ = "...-..-"; // $ 57 final String ampersand = ".-..."; // & 58 final String at = ".--.-."; // @ 59 final String plus = ".-.-."; // + 60 /*加密對應的匹配*/ 61 public String matching(String str) { 62 switch (str) { 63 case "A": 64 return A; 65 case "B": 66 return B; 67 case "C": 68 return C; 69 case "D": 70 return D; 71 case "E": 72 return E; 73 case "F": 74 return F; 75 case "G": 76 return G; 77 case "H": 78 return H; 79 case "I": 80 return I; 81 case "J": 82 return J; 83 case "K": 84 return K; 85 case "L": 86 return L; 87 case "M": 88 return M; 89 case "N": 90 return N; 91 case "O": 92 return O; 93 case "P": 94 return P; 95 case "Q": 96 return Q; 97 case "R": 98 return R; 99 case "S": 100 return S; 101 case "T": 102 return T; 103 case "U": 104 return U; 105 case "V": 106 return V; 107 case "W": 108 return W; 109 case "X": 110 return X; 111 case "Y": 112 return Y; 113 case "Z": 114 return Z; 115 case "0": 116 return $0; 117 case "1": 118 return $1; 119 case "2": 120 return $2; 121 case "3": 122 return $3; 123 case "4": 124 return $4; 125 case "5": 126 return $5; 127 case "6": 128 return $6; 129 case "7": 130 return $7; 131 case "8": 132 return $8; 133 case "9": 134 return $9; 135 case ".": 136 return period; 137 case ":": 138 return colon; 139 case ",": 140 return comma; 141 case ";": 142 return semicolon; 143 case "?": 144 return question; 145 case "=": 146 return equal; 147 case "\"": 148 return doubleQuotation; 149 case "\'": 150 return singleQuotation; 151 case "/": 152 return slash; 153 case "!": 154 return exclamation; 155 case "-": 156 return hyphen; 157 case "_": 158 return underscore; 159 case "(": 160 return lroundBrackets; 161 case ")": 162 return rroundBrackets; 163 case "$": 164 return $; 165 case "&": 166 return ampersand; 167 case "@": 168 return at; 169 case "+": 170 return plus; 171 } 172 return " "; 173 } 174 /*摩斯加密*/ 175 public String encryption(String password) { 176 Fence f = new Fence(); 177 password = f.encryption(password); 178 password = f.encryption(password); 179 String MorsePasswork = new String(); 180 String mp = new String(); 181 for (int i = 0; i < password.length(); i++) { 182 mp = mp.valueOf(password.charAt(i)); 183 MorsePasswork += matching(mp) + "/"; 184 } 185 return MorsePasswork; 186 } 187 /*解密對應換的匹配*/ 188 public String matching2(String str) { 189 if (str.equals(A)) 190 return "A"; 191 else if (str.equals(B)) 192 return "B"; 193 else if (str.equals(C)) 194 return "C"; 195 else if (str.equals(D)) 196 return "D"; 197 else if (str.equals(E)) 198 return "E"; 199 else if (str.equals(F)) 200 return "F"; 201 else if (str.equals(G)) 202 return "G"; 203 else if (str.equals(H)) 204 return "H"; 205 else if (str.equals(I)) 206 return "I"; 207 else if (str.equals(J)) 208 return "J"; 209 else if (str.equals(K)) 210 return "K"; 211 else if (str.equals(L)) 212 return "L"; 213 else if (str.equals(M)) 214 return "M"; 215 else if (str.equals(N)) 216 return "N"; 217 else if (str.equals(O)) 218 return "O"; 219 else if (str.equals(P)) 220 return "P"; 221 else if (str.equals(Q)) 222 return "Q"; 223 else if (str.equals(R)) 224 return "R"; 225 else if (str.equals(S)) 226 return "S"; 227 else if (str.equals(T)) 228 return "T"; 229 else if (str.equals(U)) 230 return "U"; 231 else if (str.equals(V)) 232 return "V"; 233 else if (str.equals(W)) 234 return "W"; 235 else if (str.equals(X)) 236 return "X"; 237 else if (str.equals(Y)) 238 return "Y"; 239 else if (str.equals(Z)) 240 return "Z"; 241 else if (str.equals($0)) 242 return "0"; 243 else if (str.equals($1)) 244 return "1"; 245 else if (str.equals($2)) 246 return "2"; 247 else if (str.equals($3)) 248 return "3"; 249 else if (str.equals($4)) 250 return "4"; 251 else if (str.equals($5)) 252 return "5"; 253 else if (str.equals($6)) 254 return "6"; 255 else if (str.equals($7)) 256 return "7"; 257 else if (str.equals($8)) 258 return "8"; 259 else if (str.equals($9)) 260 return "9"; 261 else if (str.equals(period)) 262 return "."; 263 else if (str.equals(colon)) 264 return ":"; 265 else if (str.equals(comma)) 266 return ","; 267 else if (str.equals(semicolon)) 268 return ";"; 269 else if (str.equals(question)) 270 return "?"; 271 else if (str.equals(equal)) 272 return "="; 273 else if (str.equals(doubleQuotation)) 274 return "\""; 275 else if (str.equals(singleQuotation)) 276 return "\'"; 277 else if (str.equals(slash)) 278 return "/"; 279 else if (str.equals(exclamation)) 280 return "!"; 281 else if (str.equals(hyphen)) 282 return "-"; 283 else if (str.equals(underscore)) 284 return "_"; 285 else if (str.equals(lroundBrackets)) 286 return "("; 287 else if (str.equals(rroundBrackets)) 288 return ")"; 289 else if (str.equals($)) 290 return "$"; 291 else if (str.equals(ampersand)) 292 return "&"; 293 else if (str.equals(at)) 294 return "@"; 295 else if (str.equals(plus)) 296 return "+"; 297 else 298 return " "; 299 } 300 /*摩斯解密*/ 301 public String decode(String MorsePassword) { 302 String password = new String(); 303 Fence f = new Fence(); 304 StringTokenizer p = new StringTokenizer(MorsePassword, "/"); 305 while (p.hasMoreElements()) { 306 password += matching2(p.nextToken()); 307 } 308 password = f.decode(password); 309 password = f.decode(password); 310 return password; 311 } 312 }