Java 验证Base64编码字符串
对于以下代码,当我尝试对字符串进行base64编码时Java 验证Base64编码字符串,java,string,base64,encode,Java,String,Base64,Encode,对于以下代码,当我尝试对字符串进行base64编码时 import org.apache.commons.codec.binary.Base64; public class Codec { public static void main(String[] args) { String clrTxt = "Hello world"; String encodedTxt; encodedText = new String(Base64.encodeBase
import org.apache.commons.codec.binary.Base64;
public class Codec {
public static void main(String[] args) {
String clrTxt = "Hello world";
String encodedTxt;
encodedText = new String(Base64.encodeBase64(clearText.getBytes()));
System.out.println("Encoded: " + encodedText);
System.out.println("Decoded:"
+ new String(Base64.decodeBase64(encodedText.getBytes())));
//
// output :
// Encoded: **SGVsbG8gd29ybGQ=**
// Decoded:Hello world
}
}
当我尝试插入一些额外字符时,在编码字符串中,比如-->“SGVsb*g8asdfasdfasdfasdf1234234*gd29ybGQ=”
->我得到一个清晰的文本,里面有一些变音字符。是否有一种方法来验证和克服这一点。请回复。
提前感谢。您自己验证base-64字符串的能力非常有限:只要编码的字符串具有正确的长度(即长度,包括尾随的等号,可以被四整除),并且该字符串仅包含正确的base64字符,它就被视为有效字符串 如果需要对消息进行防篡改,则需要准备一段描述原始文本的附加数据,并将其与base64编码数据一起传递到目标。在最简单的情况下,它可能是文本的校验和,但该方案很容易被击败。一种更好的方法是使用一个脚本来准备原始文本的摘要,并将该摘要与base64编码的文本一起传递到目标
请记住,传递摘要不会阻止攻击,因为攻击者可以将自己的摘要与被篡改的消息一起发送。作为安全措施,为什么要在Base64编码字符串中添加额外字符。“Hello world只是一个例子”。如果在解析将用作参数的敏感字符串时会发生什么情况?因此,它确实解码了字符串,但响应不正确。为什么我宁愿验证然后解析编码的字符串是否完全有效,并且在解码时与模式匹配?Base64只是将任意字节编码为文本格式的一种方法。这与安全无关。如果您想确保从第三方收到的某些文本没有被中间人修改,请使用加密签名。包含秘密的摘要,例如
sha1(明文+密码)
可用于检测MITM的篡改。