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 文字列を単独で検証する機能は非常に限られています。エンコードされた文字列が正しい長さ (つまり、末尾の等号を含めた長さが 4 で割り切れる) であり、文字列が適切な base64 のみで構成されている場合に限ります。有効な文字列と見なされます。

メッセージの改ざんを防止する必要がある場合は、元のテキストを説明する追加のデータを準備し、それを base64 でエンコードされたデータと共に宛先に渡す必要があります。最も単純なケースでは、テキストのチェックサムである可能性がありますが、そのスキームは簡単に打ち負かされます。より良い方法は、暗号化ハッシュ関数を使用して元のテキストのダイジェストを準備し、そのダイジェストを base64 でエンコードされたテキストと共に宛先に渡すことです。

攻撃者は改ざんされたメッセージと一緒に自分のダイジェストを送信できるため、ダイジェストを渡しても中間者攻撃を防ぐことはできないことに注意してください。

于 2012-10-13T10:57:14.173 に答える