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 }