2012-10-13 64 views
2

对于下面的代码,当我尝试base64编码一个字符串。验证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  
    } 
} 

在当我尝试插入一些extraa字符,编码字符串说 - >“SGVsb * G8ASDFASDFASDFASDFASDF1234234 * gd29ybGQ =” - >我与它的一些变音字符的明文。有没有一种方法来验证和克服这一点。请回复。 在此先感谢。

+1

为什么你首先在Base64编码的字符串中添加额外的字符?作为安全措施的 –

+0

。 “你好,世界只是一个例子”。如果在解析将被用作参数的敏感字符串的情况下怎么办?所以它解码字符串,但反应不正确。为什么shudnt我宁愿验证,然后解析,如果编码的字符串是完全有效的,并在解码时匹配模式? –

+3

Base64只是将任意字节编码为文本格式的一种方式。它与安全无关。如果您想确保从第三方收到的某些文本没有被中间人修改,请使用加密签名。 –

回答

3

只有经过编码的字符串具有正确的长度(即长度(包括尾部等号)可以被4整除)并且字符串包含只有适当的base64字符,它被认为是一个有效的字符串。

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

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

+1

可以使用包含秘密的摘要,例如'sha1(明文+密码)'来检测MITM篡改。 – phatfingers