我正在尝试检查我的输入字符串是否已编码。 但是“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/