1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.ninjasoft.magiccodes.plugins;
18
19 /***
20 * Vigenere Decryption
21 * @author enigma
22 */
23 public class VigenereDecrypt implements Plugin {
24 public String getName() {
25 return "Vigenere Decryption";
26 }
27 public String getDescription() {
28 return "Decrypt Vigenere ciphers";
29 }
30 public boolean usesKey() {
31 return true;
32 }
33 public boolean isInformational() {
34 return false;
35 }
36 public int[] doAction(int[] in, int[] key) {
37 int[] result = new int[in.length];
38 String keyStr = strip(key);
39 for (int i=0; i<in.length; i++) {
40 char letter = (char) in[i];
41 if (((letter >= 'a') && (letter <= 'z')) ||
42 ((letter >= 'A') && (letter <= 'Z'))) {
43 letter = decodeLetters(letter, keyStr.charAt(i % keyStr.length()));
44 }
45 result[i] = letter;
46 }
47 return result;
48 }
49 public char decodeLetters(char letter1, char letter2) {
50 int l1 = Character.toUpperCase(letter1) - 'A';
51 int l2 = Character.toUpperCase(letter2) - 'A';
52 int l3 = (l1 - l2 + 26) % 26;
53 return (char) (l3 + 'A');
54 }
55 public String strip(int[] s) {
56 StringBuffer result = new StringBuffer();
57 for (int i=0; i<s.length; i++) {
58 char c = Character.toUpperCase((char) s[i]);
59 if ((c >= 'A') && (c <= 'Z'))
60 result.append(c);
61 }
62 return result.toString();
63 }
64 }