【问题标题】:How to check if a input string is encoded or not?如何检查输入字符串是否已编码?
【发布时间】:2019-06-10 07:32:38
【问题描述】:

我正在尝试检查我的输入字符串是否已编码。 但是对于“123456”、“admin123”来说是“真”。

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;
        }
    }
}

能否请您帮我检查任何替代代码以检查我的输入字符串是否已编码?

【问题讨论】:

  • 您显示的代码行不检查字符串是否已加密。它只是创建一个从 Base64 解码的新字符串(不是加密)。没有简单的方法可以告诉您给定文本是否已加密,因为有许多可能的加密算法和非加密文本操作。

标签: java encryption base64


【解决方案1】:

Base64 不是关于加密加密。这是关于编码编码。 Base64 不会将您的输入转换为只有在您知道某个密钥时才能解密 的内容。不,Base64 编码的目的是确保 二进制 信息可以安全地表示为 ASCII 字符集(有关详细信息,请参阅here)。有时 Base64 与加密一起使用:您首先加密消息,然后使用 Base64 对其进行编码:因为与发送任意二进制数据相比,通过网络发送 ASCII 字符不太复杂。

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

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

但如前所述,这两个示例字符串是纯 ASCII,因此解码不会给您错误,并且您始终会得到结果 true

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

【讨论】:

  • @GhostCat,那么如何检查“12345678”、“admin123”是否被编码?
  • @DamaRamesh 查看我的更新,我添加了指向另一个应该回答该部分的现有问题的链接。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 2016-12-17
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多