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