//前缀,为了判断是否为加密的字符串,在解密的时候判断是否为加密的字符串,不是加密的字符串不进行处理
private static final String BASE_PREFIX = "BASE-";
/** * 判断是否是 BASE64 编码 * * @param base64 base64 编码值 * @return true / false */ public static boolean isBaseEncode(String base64) { return base64 != null && base64.indexOf(BASE_PREFIX) == 0; } /** * 获取进行 BASE64 编码后的值 * * @param src 原文 * @return Optional 包装后的编码值 */ public static Optional<String> baseEncode(String src) { if (src == null) { return Optional.empty(); } return Optional.of(BASE_PREFIX + Base64.encodeBase64String(src.getBytes())); } /** * 获取 BASE64 解码后的值 * * @param base64 编码后的值 * @return Optional 包装后的解码值 */ public static Optional<String> baseDecode(String base64) { if (base64 == null) { return Optional.empty(); } return Optional.of(new String(Base64.decodeBase64(base64.substring(BASE_PREFIX.length())))); }
/** * 判断加密类型自动解密,如果未加密,直接返回原文 * * @param encrypted 密文 * @return 解密后字符串 */ public static String autoDecrypt(String encrypted) { String src; if (isBaseEncode(encrypted)) { Optional<String> optional = baseDecode(encrypted); src = optional.isPresent() ? optional.get() : null; } else { src = encrypted; } return src; }