View Javadoc
1   package com.jsql.util.bruter;
2   
3   import com.jsql.util.StringUtil;
4   import org.apache.commons.text.StringEscapeUtils;
5   
6   import java.io.IOException;
7   import java.security.NoSuchAlgorithmException;
8   import java.util.Arrays;
9   import java.util.List;
10  import java.util.Optional;
11  import java.util.stream.Collectors;
12  
13  public enum ActionCoder {
14      MD2(Coder.MD2.label, true) {
15          @Override
16          public String run(String value) throws NoSuchAlgorithmException {
17              return HashUtil.toHash(this.name, value);
18          }
19      },
20      MD4(Coder.MD4.label, true) {
21          @Override
22          public String run(String value) {
23              return HashUtil.toMd4(value);
24          }
25      },
26      MD5(Coder.MD5.label, true) {
27          @Override
28          public String run(String value) throws NoSuchAlgorithmException {
29              return HashUtil.toHash(this.name, value);
30          }
31      },
32      SHA_1(Coder.SHA1.label, true) {
33          @Override
34          public String run(String value) throws NoSuchAlgorithmException {
35              return HashUtil.toHash(this.name, value);
36          }
37      },
38      SHA_256(Coder.SHA256.label, true) {
39          @Override
40          public String run(String value) throws NoSuchAlgorithmException {
41              return HashUtil.toHash(this.name, value);
42          }
43      },
44      SHA_384(Coder.SHA384.label, true) {
45          @Override
46          public String run(String value) throws NoSuchAlgorithmException {
47              return HashUtil.toHash(this.name, value);
48          }
49      },
50      SHA_512(Coder.SHA512.label, true) {
51          @Override
52          public String run(String value) throws NoSuchAlgorithmException {
53              return HashUtil.toHash(this.name, value);
54          }
55      },
56      MYSQL(Coder.MYSQL.label, true) {
57          @Override
58          public String run(String value) throws NoSuchAlgorithmException {
59              return HashUtil.toMySql(value);
60          }
61      },
62      ADLER32(Coder.ADLER32.label, true, false) {
63          @Override
64          public String run(String value) {
65              return HashUtil.toAdler32(value);
66          }
67      },
68      CRC16(Coder.CRC16.label, true, false) {
69          @Override
70          public String run(String value) {
71              return HashUtil.toCrc16(value);
72          }
73      },
74      CRC32(Coder.CRC32.label, true, false) {
75          @Override
76          public String run(String value) {
77              return HashUtil.toCrc32(value);
78          }
79      },
80      CRC64(Coder.CRC64.label, true, false) {
81          @Override
82          public String run(String value) {
83              return HashUtil.toCrc64(value);
84          }
85      },
86      ENCODE_TO_HEX(ActionCoder.ENCODE_TO + Coder.HEX) {
87          @Override
88          public String run(String value) {
89              return StringUtil.toHex(value);
90          }
91      },
92      ENCODE_TO_HEX_ZIP(ActionCoder.ENCODE_TO + Coder.HEX_ZIP) {
93          @Override
94          public String run(String value) throws IOException {
95              return StringUtil.toHexZip(value);
96          }
97      },
98      ENCODE_TO_BASE64_ZIP(ActionCoder.ENCODE_TO + Coder.BASE64_ZIP) {
99          @Override
100         public String run(String value) throws IOException {
101             return StringUtil.toBase64Zip(value);
102         }
103     },
104     ENCODE_TO_BASE64(ActionCoder.ENCODE_TO + Coder.BASE64) {
105         @Override
106         public String run(String value) {
107             return StringUtil.base64Encode(value);
108         }
109     },
110     ENCODE_TO_BASE32(ActionCoder.ENCODE_TO + Coder.BASE32) {
111         @Override
112         public String run(String value) {
113             return StringUtil.base32Encode(value);
114         }
115     },
116     ENCODE_TO_BASE58(ActionCoder.ENCODE_TO + Coder.BASE58) {
117         @Override
118         public String run(String value) {
119             return StringUtil.base58Encode(value);
120         }
121     },
122     ENCODE_TO_BASE16(ActionCoder.ENCODE_TO + Coder.BASE16) {
123         @Override
124         public String run(String value) {
125             return StringUtil.base16Encode(value);
126         }
127     },
128     ENCODE_TO_HTML(ActionCoder.ENCODE_TO + Coder.HTML) {
129         @Override
130         public String run(String value) {
131             return StringUtil.toHtml(value);
132         }
133     },
134     ENCODE_TO_HTML_DECIMAL(ActionCoder.ENCODE_TO + Coder.HTML_DECIMAL) {
135         @Override
136         public String run(String value) {
137             return StringUtil.toHtmlDecimal(value);
138         }
139     },
140     ENCODE_TO_URL(ActionCoder.ENCODE_TO + Coder.URL) {
141         @Override
142         public String run(String value) {
143             return StringUtil.toUrl(value);
144         }
145     },
146     ENCODE_TO_UNICODE(ActionCoder.ENCODE_TO + Coder.UNICODE) {
147         @Override
148         public String run(String value) {
149             return StringEscapeUtils.escapeJava(value);
150         }
151     },
152     DECODE_FROM_HEX(ActionCoder.DECODE_FROM + Coder.HEX) {
153         @Override
154         public String run(String value) {
155             return StringUtil.fromHex(value);
156         }
157     },
158     DECODE_FROM_HEX_ZIP(ActionCoder.DECODE_FROM + Coder.HEX_ZIP) {
159         @Override
160         public String run(String value) throws IOException {
161             return StringUtil.fromHexZip(value);
162         }
163     },
164     DECODE_FROM_BASE64_ZIP(ActionCoder.DECODE_FROM + Coder.BASE64_ZIP) {
165         @Override
166         public String run(String value) throws IOException {
167             return StringUtil.fromBase64Zip(value);
168         }
169     },
170     DECODE_FROM_BASE64(ActionCoder.DECODE_FROM + Coder.BASE64) {
171         @Override
172         public String run(String value) {
173             return StringUtil.base64Decode(value);
174         }
175     },
176     DECODE_FROM_BASE32(ActionCoder.DECODE_FROM + Coder.BASE32) {
177         @Override
178         public String run(String value) {
179             return StringUtil.base32Decode(value);
180         }
181     },
182     DECODE_FROM_BASE58(ActionCoder.DECODE_FROM + Coder.BASE58) {
183         @Override
184         public String run(String value) {
185             return StringUtil.base58Decode(value);
186         }
187     },
188     DECODE_FROM_BASE16(ActionCoder.DECODE_FROM + Coder.BASE16) {
189         @Override
190         public String run(String value) {
191             return StringUtil.base16Decode(value);
192         }
193     },
194     DECODE_FROM_HTML(ActionCoder.DECODE_FROM + Coder.HTML) {
195         @Override
196         public String run(String value) {
197             return StringUtil.fromHtml(value);
198         }
199     },
200     DECODE_FROM_UNICODE(ActionCoder.DECODE_FROM + Coder.UNICODE) {
201         @Override
202         public String run(String value) {
203             return StringEscapeUtils.unescapeJava(value);
204         }
205     },
206     DECODE_FROM_URL(ActionCoder.DECODE_FROM + Coder.URL) {
207         @Override
208         public String run(String value) {
209             return StringUtil.fromUrl(value);
210         }
211     };
212 
213     public static final String ENCODE_TO = "Encode to ";
214     public static final String DECODE_FROM = "Decode from ";
215     
216     protected final String name;
217     private final boolean isHash;
218     private final boolean isEmptyPossible;
219 
220     ActionCoder(String name) {
221         this(name, false, false);
222     }
223     ActionCoder(String name, boolean isHash) {
224         this(name, isHash, true);
225     }
226     ActionCoder(String name, boolean isHash, boolean isEmptyPossible) {
227         this.name = name;
228         this.isHash = isHash;
229         this.isEmptyPossible = isEmptyPossible;
230     }
231 
232     public static List<String> getHashes() {
233         return Arrays.stream(ActionCoder.values())
234             .filter(action -> action.isHash)
235             .map(actionCoder -> actionCoder.name)
236             .collect(Collectors.toList());
237     }
238 
239     public static List<String> getHashesEmpty() {
240         return Arrays.stream(ActionCoder.values())
241             .filter(action -> action.isHash && action.isEmptyPossible)
242             .map(actionCoder -> actionCoder.name)
243             .collect(Collectors.toList());
244     }
245 
246     public static Optional<ActionCoder> forName(String name) {
247         return Arrays.stream(ActionCoder.values())
248             .filter(action -> name.equals(action.name))
249             .findFirst();
250     }
251 
252     public abstract String run(String value) throws IOException, NoSuchAlgorithmException;
253 
254     public String getName() {
255         return this.name;
256     }
257 }