java - 如何检查输入字符串是否经过编码?

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

您能帮我检查是否有替代代码来检查我的输入字符串是否已编码?

最佳答案

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

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

所以:您的方法 isEncrypted() 应重命名为 isEncoded()。正如 RealSkeptic 正确指出的那样,当输入字符串不是采用 Base64 格式时,decode() 方法将(仅)抛出 InvalidArgumentException。 (假设我们正在讨论“内置”Base64.Decoder 类)

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

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

关于java - 如何检查输入字符串是否经过编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522276/

相关文章:

security - 在 web2py 中加密存储数据的最佳方法是什么?

java - 解密电子邮件中附加的 GPG 文件

c# - 如何告诉 EF 不要在 Code First 中更新引用类型属性?

javascript - 图片转Base64

c# - Java SHA1 哈希到 base64 : unsigned bytes?

c# - 在 C# 上获取文件的 SHA1 二进制 base64 哈希

java - 结果集内存

java - 使用 KOTLIN android studio 进行 JUnit 测试 [基本计算器]

java - 车牌检测问题

java - addPropertyChangeListener 上出现 NullPointerException