メッセージ・サマリーを使用してユーザー・パスワードを暗号化

2312 ワード

メッセージ要約アルゴリズムの主な特徴は、暗号化プロセスに鍵が不要であり、暗号化されたデータが復号できないことであり、同じ明文データを入力して同じメッセージ要約アルゴリズムを通過してこそ、同じ暗号文を得ることができる.メッセージ要約アルゴリズムは鍵の管理と配布の問題がなく,分散ネットワークと同様に使用するのに適している.その暗号化計算のワークロードはかなり大きいため、従来のアルゴリズムは通常、データ量が限られている場合の暗号化にのみ使用され、例えば、コンピュータのパスワードは不可逆暗号化アルゴリズムで暗号化されている.近年、コンピュータの同じ性能の急速な改善に伴い、暗号化速度はこのような暗号化技術の発展を制限する束縛となっていないため、メッセージ要約アルゴリズムの応用分野は増加している.現在、メッセージ要約アルゴリズムは、明文の要約アルゴリズムとして「デジタル署名」の分野で主に適用されている.有名な要約アルゴリズムにはRSA社のMD 5アルゴリズムとSHA-1アルゴリズムとその大量の変体がある.
メッセージの要約は、データ・ブロックのデジタル・フィンガープリントです.すなわち、任意の長さの1つのデータブロックを計算し、一意のフィンガープリントを生成する(SHA 1に対して20バイトのバイナリ配列を生成する).
メッセージ・サマリーには、次の2つの基本プロパティがあります.
  • の2つの異なるメッセージは、同じ要約
  • を生成することが困難である.
  • は、指定するダイジェストに対して1つのメッセージを生成することが困難であり、そのメッセージからその指定されたダイジェスト
  • を逆推定する.
    代表:アメリカ国家標準技術研究所のSHA 1とマサチューセッツ工科大学Ronald Rivestが提出したMD 5
    Sun社が提供するアルゴリズムパッケージを使用して、メッセージの要約計算を行います.
    
    import java.security.*;
    public class myDigest {
      public static void main(String[] args)  {
        myDigest my=new myDigest();
        my.testDigest();
      }
      public void testDigest()
      {
       try {
         String myinfo="      ";
        //java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");
          java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
          alga.update(myinfo.getBytes());
          byte[] digesta=alga.digest();
          System.out.println("      :"+byte2hex(digesta));
          //               (myinfo)   (digesta)                
          java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
          algb.update(myinfo.getBytes());
          if (algb.isEqual(digesta,algb.digest())) {
             System.out.println("      ");
           }
           else
            {
              System.out.println("     ");
             }
       }
       catch (java.security.NoSuchAlgorithmException ex) {
         System.out.println("      ");
       }
      }
      public String byte2hex(byte[] b) //       
        {
         String hs="";
         String stmp="";
         for (int n=0;n<b.length;n++)
          {
           stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
           if (stmp.length()==1) hs=hs+"0"+stmp;
           else hs=hs+stmp;
           if (n<b.length-1)  hs=hs+":";
          }
         return hs.toUpperCase();
        }
    }

    由来:Java上の暗号化アルゴリズムの実装例