当我尝试对字符串进行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.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 *的 G8ASDFASDFASDFASDFASDF1234234 * gd29ybGQ =” - >我得到一个带有一些变音字符的明文。有没有一种方法来验证和克服这个问题。请回复。 提前谢谢。
答案 0 :(得分:3)
你自己验证base-64字符串的能力非常有限:只要编码的字符串具有正确的长度(即长度,包括尾随等号,可被4整除),字符串由只有正确的base64字符,才被视为有效字符串。
如果您需要对您的消息进行防篡改,则需要准备一份描述原始文本的附加数据,并将其与base64编码数据一起传递到目的地。在最简单的情况下,它可能是文本的校验和,但该方案很容易被击败。更好的方法是使用cryptographic hash function准备原始文本的摘要,并将该摘要与base64编码文本一起传递到目标。
请记住,传递摘要不会阻止man-in-the-middle attacks,因为攻击者可以发送自己的摘要以及篡改的消息。