如何检查输入字符串是否已编码?

时间:2019-06-10 07:32:38

标签: java encryption base64

我正在尝试检查我的输入字符串是否已经编码。 但是对于“ 123456”,“ admin123”却获得了“ true”。

new String(Base64.getDecoder().decode(inputStr), StandardCharsets.UTF_8);
public class AppTest {

    public static void main(String[] args) {
        String inputStr = "admin123";
        System.out.println("isEncoded: " + isEncoded(inputStr));
    }

    private static boolean isEncoded(String inputStr) {
        try {
            new String(Base64.getDecoder().decode(inputStr), StandardCharsets.UTF_8);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

能否请您帮我检查一下任何备用代码,以检查我输入的字符串是否经过编码?

2 个答案:

答案 0 :(得分:1)

Base64与en 加密无关。这是关于编码的。 Base64不会将您的输入转换为仅当您知道某个秘密密钥时才能进行解密的操作。不可以,Base64编码的目的是确保 binary 信息可以安全地表示为ASCII字符集(有关更多详细信息,请参见here)。有时Baseem与一起使用进行加密:首先对邮件进行加密,然后使用Base64对其进行编码:因为与通过发送任意二进制数据相比,通过网络发送ASCII字符要简单得多。

现在:您的两个字符串“ 123456”和“ admin123”仅使用ASCII字符,因此使用Base64进行编码是没有意义的。或者更确切地说:因为“全ASCII”,解码不会引发错误。

因此:您的方法isEncrypted()应该重命名为isEncoded()。正如RealSkeptic正确指出的那样,当输入字符串在Base64中为 not 时,decode()方法将(仅)抛出InvalidArgumentException。 (假设我们正在谈论“内置” Base64.Decoder类)

但是,正如前面所说,两个示例字符串都是纯ASCII,因此解码不会给您带来错误,并且您总是以结果true结尾。

here回答了问题“是base64编码的字符串”。

答案 1 :(得分:0)

base64不是一种加密,它是一种用于将二进制数据转换为紧凑文本格式的编码算法,因此您可以通过基于文本的协议进行发送 puls base64并非用于对文本(字符二进制数据)进行编码的图片,而是用于图片视频....