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 }