2

对于以下代码,当我尝试对字符串进行 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=" -> 我得到一个包含一些变音字符的明文。有没有一种方法可以验证和克服这一点。请回复。提前致谢。

4

1 回答 1

3

您自己验证 base-64 字符串的能力非常有限:只要编码的字符串具有正确的长度(即长度,包括尾随等号,可以被四整除)并且字符串仅包含正确的 base64字符,它被认为是一个有效的字符串。

如果您需要防篡改您的消息,您需要准备一段额外的数据来描述原始文本,并将其与您的 base64 编码数据一起传递到目的地。在最简单的情况下,它可能是文本的校验和,但这种方案很容易被击败。更好的方法是使用加密哈希函数准备原始文本的摘要,并将该摘要与 base64 编码的文本一起传递到目的地。

请记住,传递摘要不会阻止中间人攻击,因为攻击者可以发送他自己的摘要以及被篡改的消息。

于 2012-10-13T10:57:14.173 回答