验证Base64编码字符串

时间:2012-10-13 10:31:25

标签: 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.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 =” - >我得到一个带有一些变音字符的明文。有没有一种方法来验证和克服这个问题。请回复。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

你自己验证base-64字符串的能力非常有限:只要编码的字符串具有正确的长度(即长度,包括尾随等号,可被4整除),字符串由只有正确的base64字符,才被视为有效字符串。

如果您需要对您的消息进行防篡改,则需要准备一份描述原始文本的附加数据,并将其与base64编码数据一起传递到目的地。在最简单的情况下,它可能是文本的校验和,但该方案很容易被击败。更好的方法是使用cryptographic hash function准备原始文本的摘要,并将该摘要与base64编码文本一起传递到目标。

请记住,传递摘要不会阻止man-in-the-middle attacks,因为攻击者可以发送自己的摘要以及篡改的消息。