ActionCoder.java
package com.jsql.util.bruter;
import com.jsql.util.StringUtil;
import org.apache.commons.text.StringEscapeUtils;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public enum ActionCoder {
MD2(Coder.MD2.label, true) {
@Override
public String run(String value) throws NoSuchAlgorithmException {
return HashUtil.toHash(this.name, value);
}
},
MD4(Coder.MD4.label, true) {
@Override
public String run(String value) {
return HashUtil.toMd4(value);
}
},
MD5(Coder.MD5.label, true) {
@Override
public String run(String value) throws NoSuchAlgorithmException {
return HashUtil.toHash(this.name, value);
}
},
SHA_1(Coder.SHA1.label, true) {
@Override
public String run(String value) throws NoSuchAlgorithmException {
return HashUtil.toHash(this.name, value);
}
},
SHA_256(Coder.SHA256.label, true) {
@Override
public String run(String value) throws NoSuchAlgorithmException {
return HashUtil.toHash(this.name, value);
}
},
SHA_384(Coder.SHA384.label, true) {
@Override
public String run(String value) throws NoSuchAlgorithmException {
return HashUtil.toHash(this.name, value);
}
},
SHA_512(Coder.SHA512.label, true) {
@Override
public String run(String value) throws NoSuchAlgorithmException {
return HashUtil.toHash(this.name, value);
}
},
MYSQL(Coder.MYSQL.label, true) {
@Override
public String run(String value) throws NoSuchAlgorithmException {
return HashUtil.toMySql(value);
}
},
ADLER32(Coder.ADLER32.label, true, false) {
@Override
public String run(String value) {
return HashUtil.toAdler32(value);
}
},
CRC16(Coder.CRC16.label, true, false) {
@Override
public String run(String value) {
return HashUtil.toCrc16(value);
}
},
CRC32(Coder.CRC32.label, true, false) {
@Override
public String run(String value) {
return HashUtil.toCrc32(value);
}
},
CRC64(Coder.CRC64.label, true, false) {
@Override
public String run(String value) {
return HashUtil.toCrc64(value);
}
},
ENCODE_TO_HEX(ActionCoder.ENCODE_TO + Coder.HEX) {
@Override
public String run(String value) {
return StringUtil.toHex(value);
}
},
ENCODE_TO_HEX_ZIP(ActionCoder.ENCODE_TO + Coder.HEX_ZIP) {
@Override
public String run(String value) throws IOException {
return StringUtil.toHexZip(value);
}
},
ENCODE_TO_BASE64_ZIP(ActionCoder.ENCODE_TO + Coder.BASE64_ZIP) {
@Override
public String run(String value) throws IOException {
return StringUtil.toBase64Zip(value);
}
},
ENCODE_TO_BASE64(ActionCoder.ENCODE_TO + Coder.BASE64) {
@Override
public String run(String value) {
return StringUtil.base64Encode(value);
}
},
ENCODE_TO_BASE32(ActionCoder.ENCODE_TO + Coder.BASE32) {
@Override
public String run(String value) {
return StringUtil.base32Encode(value);
}
},
ENCODE_TO_BASE58(ActionCoder.ENCODE_TO + Coder.BASE58) {
@Override
public String run(String value) {
return StringUtil.base58Encode(value);
}
},
ENCODE_TO_BASE16(ActionCoder.ENCODE_TO + Coder.BASE16) {
@Override
public String run(String value) {
return StringUtil.base16Encode(value);
}
},
ENCODE_TO_HTML(ActionCoder.ENCODE_TO + Coder.HTML) {
@Override
public String run(String value) {
return StringUtil.toHtml(value);
}
},
ENCODE_TO_HTML_DECIMAL(ActionCoder.ENCODE_TO + Coder.HTML_DECIMAL) {
@Override
public String run(String value) {
return StringUtil.toHtmlDecimal(value);
}
},
ENCODE_TO_URL(ActionCoder.ENCODE_TO + Coder.URL) {
@Override
public String run(String value) {
return StringUtil.toUrl(value);
}
},
ENCODE_TO_UNICODE(ActionCoder.ENCODE_TO + Coder.UNICODE) {
@Override
public String run(String value) {
return StringEscapeUtils.escapeJava(value);
}
},
DECODE_FROM_HEX(ActionCoder.DECODE_FROM + Coder.HEX) {
@Override
public String run(String value) {
return StringUtil.fromHex(value);
}
},
DECODE_FROM_HEX_ZIP(ActionCoder.DECODE_FROM + Coder.HEX_ZIP) {
@Override
public String run(String value) throws IOException {
return StringUtil.fromHexZip(value);
}
},
DECODE_FROM_BASE64_ZIP(ActionCoder.DECODE_FROM + Coder.BASE64_ZIP) {
@Override
public String run(String value) throws IOException {
return StringUtil.fromBase64Zip(value);
}
},
DECODE_FROM_BASE64(ActionCoder.DECODE_FROM + Coder.BASE64) {
@Override
public String run(String value) {
return StringUtil.base64Decode(value);
}
},
DECODE_FROM_BASE32(ActionCoder.DECODE_FROM + Coder.BASE32) {
@Override
public String run(String value) {
return StringUtil.base32Decode(value);
}
},
DECODE_FROM_BASE58(ActionCoder.DECODE_FROM + Coder.BASE58) {
@Override
public String run(String value) {
return StringUtil.base58Decode(value);
}
},
DECODE_FROM_BASE16(ActionCoder.DECODE_FROM + Coder.BASE16) {
@Override
public String run(String value) {
return StringUtil.base16Decode(value);
}
},
DECODE_FROM_HTML(ActionCoder.DECODE_FROM + Coder.HTML) {
@Override
public String run(String value) {
return StringUtil.fromHtml(value);
}
},
DECODE_FROM_UNICODE(ActionCoder.DECODE_FROM + Coder.UNICODE) {
@Override
public String run(String value) {
return StringEscapeUtils.unescapeJava(value);
}
},
DECODE_FROM_URL(ActionCoder.DECODE_FROM + Coder.URL) {
@Override
public String run(String value) {
return StringUtil.fromUrl(value);
}
};
public static final String ENCODE_TO = "Encode to ";
public static final String DECODE_FROM = "Decode from ";
protected final String name;
private final boolean isHash;
private final boolean isEmptyPossible;
ActionCoder(String name) {
this(name, false, false);
}
ActionCoder(String name, boolean isHash) {
this(name, isHash, true);
}
ActionCoder(String name, boolean isHash, boolean isEmptyPossible) {
this.name = name;
this.isHash = isHash;
this.isEmptyPossible = isEmptyPossible;
}
public static List<String> getHashes() {
return Arrays.stream(ActionCoder.values())
.filter(action -> action.isHash)
.map(actionCoder -> actionCoder.name)
.collect(Collectors.toList());
}
public static List<String> getHashesEmpty() {
return Arrays.stream(ActionCoder.values())
.filter(action -> action.isHash && action.isEmptyPossible)
.map(actionCoder -> actionCoder.name)
.collect(Collectors.toList());
}
public static Optional<ActionCoder> forName(String name) {
return Arrays.stream(ActionCoder.values())
.filter(action -> name.equals(action.name))
.findFirst();
}
public abstract String run(String value) throws IOException, NoSuchAlgorithmException;
public String getName() {
return this.name;
}
}