Java で、ハッシュ値 (ハッシュダイジェスト) を扱う

Java で、ハッシュ値(ハッシュダイジェスト)を扱うには、例えば以下のようにする。 使用するクラス
import java.security.MessageDigest;
import java.security.MessageDigest;

public class HashTest {

    public static final String HASH_ALGORITHM = "SHA1";
//  public static final String HASH_ALGORITHM = "MD5";

    public static final String password = "password";

    public static void main(String[] args){

        try {
            password =  this.getDigest(password);
        } catch(Exception e) {
e.printStackTrace();
        }
    }

    public String getDigest(String data) throws Exception {

        StringBuffer s = new StringBuffer();
        MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM);
        byte[] dat = data.getBytes();
        md.update(dat);

        byte[] digest = md.digest();
        for (int i = 0; i < digest.length; i++) {
            int d = digest[i];

            if (d < 0) {  // byte 128-255
                d += 256;
            }
            if (d < 16) { //0-15 16
                s.append("0");
            }
            s.append(Integer.toString(d, 16));
        }
        return s.toString();
    }
}
public static final String HASH_ALGORITHM = "SHA1";
//  public static final String HASH_ALGORITHM = "MD5";
...
MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM);
のように、MessageDigest オブジェクトのインスタンス取得のときにハッシュアルゴリズムを指定することができる。また、
byte[] digest = md.digest();
だけでは、byte[] しか返ってこないので、ダイジェスト値を文字列として扱いたい場合はこのJava のバイト列を文字列に変換する必要がある。
Java で、ハッシュ値(ハッシュダイジェスト)を扱うには、例えば以下のようにする。 使用するクラス
import java.security.MessageDigest;
import java.security.MessageDigest;

public class HashTest {

    public static final String HASH_ALGORITHM = "SHA1";
//  public static final String HASH_ALGORITHM = "MD5";

    public static final String password = "password";

    public static void main(String[] args){

        try {
            password =  this.getDigest(password);
        } catch(Exception e) {
e.printStackTrace();
        }
    }

    public String getDigest(String data) throws Exception {

        StringBuffer s = new StringBuffer();
        MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM);
        byte[] dat = data.getBytes();
        md.update(dat);

        byte[] digest = md.digest();
        for (int i = 0; i < digest.length; i++) {
            int d = digest[i];

            if (d < 0) {  // byte 128-255
                d += 256;
            }
            if (d < 16) { //0-15 16
                s.append("0");
            }
            s.append(Integer.toString(d, 16));
        }
        return s.toString();
    }
}
public static final String HASH_ALGORITHM = "SHA1";
//  public static final String HASH_ALGORITHM = "MD5";
...
MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM);
のように、MessageDigest オブジェクトのインスタンス取得のときにハッシュアルゴリズムを指定することができる。また、
byte[] digest = md.digest();
だけでは、byte[] しか返ってこないので、ダイジェスト値を文字列として扱いたい場合はこのJava のバイト列を文字列に変換する必要がある。
Posted on 2006-03-17 by yas |

PHP が使われている有名なシステム・ソフト

PHP が使われているシステムやソフトは枚挙にいとまがない。ここではその事例を挙げてみよう (随時更新予定、コメントに 「こんなのがあるよ」 といただけると助かります!)。
PHP が使われているシステムやソフトは枚挙にいとまがない。ここではその事例を挙げてみよう (随時更新予定、コメントに 「こんなのがあるよ」 といただけると助かります!)。
Posted on 2006-03-14 by yas |

Java が使われている有名なシステム・ソフト

Java が使われているシステムやソフトは枚挙にいとまがない。ここではその事例を挙げてみよう。
Java が使われているシステムやソフトは枚挙にいとまがない。ここではその事例を挙げてみよう。
Posted on 2006-03-11 by yas |

Java について

以下、情報化白書 2000 に寄稿したもの (文末表現、接続語等を時代に合わせて一部改変)。 Java には「プログラミング言語としての Java」と「実行環境としての Java」の 2 つの側面がある。言語としてのJava はオブジェクト指向であり、言語の一部としてクラスライブラリが提供される。言語仕様は C++ の流れを汲んでいるが、バグの原因となりやすいポインタをなくし、メモリ管理も自動化しているなどの特長を持つ。実行環境としての Java の理念は「1度書けばどこでも動く」というものである。通常 C/C++ 言語などで書かれたプログラムではコンパイル後、特定のプラットフォーム (OS) 上でしか動作しないが、Java では同一の Java プログラムが異なるプラットフォーム上で動作するようになっている。これは Java のコンパイルされた結果であるバイトコードと呼ばれる中間コードが、それぞれのプラットフォームごとに用意された Java VM (Virtual Machine) で動作するという仕組みのためである。 1995 年に最初の Java がリリースされて以来、Java の進展と共にそのライブラリの数も膨大なものとなり、開発元の Sun Microsystems は 1999 年 7月、Java をアーキテクチャーごとに 3つに分けて整理した。すなわち、Java 2 Platform, Standard Edition (J2SE)、Java 2 Platform, Enterprise Edition (J2EE)、Java 2 Platform, Micro Edition (J2ME) で、それぞれデスクトップ向け、サーバ向け、携帯端末向けの Java である。 Java と言えば当初はクライアント側のブラウザ上で動作する Java アプレットが有名だったが、最近ではサーバ側の J2EE としてアプリケーションサーバ上でビジネスロジックの記述やデータベースとの連携に適用されることが多くなってきている。 また、携帯端末に J2ME を適用する動きも活発である。韓国の LG テレコムは世界で初めて携帯電話に Java を載せ実用化しており、日本でも NTT ドコモが 2001 年早々に Java のプログラムが動作する携帯電話を発売している。
以下、情報化白書 2000 に寄稿したもの (文末表現、接続語等を時代に合わせて一部改変)。 Java には「プログラミング言語としての Java」と「実行環境としての Java」の 2 つの側面がある。言語としてのJava はオブジェクト指向であり、言語の一部としてクラスライブラリが提供される。言語仕様は C++ の流れを汲んでいるが、バグの原因となりやすいポインタをなくし、メモリ管理も自動化しているなどの特長を持つ。実行環境としての Java の理念は「1度書けばどこでも動く」というものである。通常 C/C++ 言語などで書かれたプログラムではコンパイル後、特定のプラットフォーム (OS) 上でしか動作しないが、Java では同一の Java プログラムが異なるプラットフォーム上で動作するようになっている。これは Java のコンパイルされた結果であるバイトコードと呼ばれる中間コードが、それぞれのプラットフォームごとに用意された Java VM (Virtual Machine) で動作するという仕組みのためである。 1995 年に最初の Java がリリースされて以来、Java の進展と共にそのライブラリの数も膨大なものとなり、開発元の Sun Microsystems は 1999 年 7月、Java をアーキテクチャーごとに 3つに分けて整理した。すなわち、Java 2 Platform, Standard Edition (J2SE)、Java 2 Platform, Enterprise Edition (J2EE)、Java 2 Platform, Micro Edition (J2ME) で、それぞれデスクトップ向け、サーバ向け、携帯端末向けの Java である。 Java と言えば当初はクライアント側のブラウザ上で動作する Java アプレットが有名だったが、最近ではサーバ側の J2EE としてアプリケーションサーバ上でビジネスロジックの記述やデータベースとの連携に適用されることが多くなってきている。 また、携帯端末に J2ME を適用する動きも活発である。韓国の LG テレコムは世界で初めて携帯電話に Java を載せ実用化しており、日本でも NTT ドコモが 2001 年早々に Java のプログラムが動作する携帯電話を発売している。
Posted on 2006-03-08 by yas |