Java
 Computer >> コンピューター >  >> プログラミング >> Java

なぜChar[]配列はJavaのStringよりも安全(機密データを保存)するのですか?


両方の文字列 およびChar[]配列 テキストデータを保存するために使用されますが、どちらかを選択するのはより困難です。たぶん、の不変性からアイデアを得ることができます 文字列 なぜchar[]配列 パスワードなどの機密情報データを保存するには、文字列よりも優先されます 、 SSN、 など

  • プレーン文字列を使用すると、ログやchar[]配列があるその他の安全でない場所に誤ってパスワードを出力する可能性がはるかに高くなります。 脆弱性が少ない
  • 文字列は不変であるため 、文字列の内容を変更または上書きできるようにするメソッドは定義されていません。この機能により、文字列オブジェクトが不安定になり、パスワードなどの安全な情報を保存できなくなります。 、 SSN、 など。安全な情報は常に文字列ではなくchar[]配列に格納する必要があります。
  • パスワードをプレーンテキストとして保存すると文字列は不変であるため、ゴミまでメモリで使用できます。 コレクター それをきれいにします。文字列が使用されているのでS トリングコンスタントプール(SCP) 文字列を再利用できるようにするために、文字列が長期間メモリに残る可能性がかなりあります。メモリダンプにアクセスできる人なら誰でもプレーンテキストでパスワードを簡単に見つけることができるので、もう1つの理由は暗号化を使用する必要があります パスワード プレーンテキストより。
  • JavaSwingアプリケーションで気付いた場合 、 JPasswordFieldのメソッドがあります getPassword() char []を返します 非推奨のメソッドgetText() パスワードをプレーンテキストで返します。したがって、Java自体がget password ()の使用を推奨しています。 メソッド。
  • パスワードをchar[]配列に格納するもう1つの理由 、たとえば、char []はサニタイズできるため、使用後にクリアパスワードをジャンクでオーバーライドできますが、StringはJavaでは不変です。

public class SecureInfoData {
   public static void main(String args[]) {
      String pwd = "string_pass_word";
      System.out.println("String Password is: " + pwd);
      char charPwd[] = "char_pass_word".toCharArray();
      System.out.println("Character Password is: " + charPwd);
   }
}

出力

String Password is: string_pass_word
Character Password is: [C@6d06d69c

  1. Oracleで機密データを保護する

    組織は、社会保障番号、銀行口座番号、銀行コード、その他の同様のデータなどの機密データを保護するという大きな課題に直面しています。 はじめに 規制や法律は、組織が自分のデータや顧客情報を悪意のある人の手に渡らないように保護することを義務付けています。 データの編集 、または動的データマスキング(DDM) は、機密データ要素を難読化または非表示にするプロセスです。 Oracle®DataRedactionは、機密情報の公開を減らし、アプリケーションページで機密データを開示する可能性のあるアプリケーションの欠陥の悪用を防ぐのに役立ちます。 データベースとアプリケーションの管理者、セキュリティ管

  2. Android が iPhone よりも人気がある理由

    Android と iPhone プラットフォームは、より優れた画面、プロセッサ チップ、およびカメラをめぐる終わりのない戦いを繰り広げてきました。 2007 年、Apple は史上初のタッチスクリーン付きスマートフォンを発表し、多くの消費者を魅了しました。ただし、価格帯の関係で、万人向けではありませんでした。 2008 年に Android が登場すると、2010 年末までに市場が 2 つに分割されました。Android はプラットフォームとして発売されました。つまり、他の携帯電話メーカーがオペレーティング システムとして使用できることを意味しますが、iOS プラットフォームは iPhon