warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

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 |

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 |

Java で、JDBC を使って MySQL にアクセスする方法

Java で MySQL にアクセスするには、MySQL 用の JDBC のドライバが必要である。このドライバは MySQL のサイトから入手できる (MySQL Connector/J とあるので、安定版または最新バージョンをダウンロードする)。 ダウンロードしたものを解凍すると、mysql-connector-java-x.x.xx-bin.jar というファイルがあるはずなので、これを (Linux の場合は) $JAVA_HOME/jre/lib/ext にコピーする。ここに JAR ファイルを置いておく限り、このドライバ (JAR ファイル) に対する CLASSPATH は特に設定する必要はない。 以下はデータベース中の users テーブルから、name と password という 2つのフィールドを読み出す例である (MySQLJDBCTest.java という名前で保存)。
import java.sql.*;

public class MySQLJDBCTest {

    public static void main(String[] args) {

        try {
            // ドライバをロード
            Class.forName("org.gjt.mm.mysql.Driver");

            // データベースへ接続
            String url = "jdbc:mysql:///データベース名?&user=ユーザー名&password=パスワード&"
                       + "useUnicode=true&characterEncoding=UTF-8";
            Connection con = DriverManager.getConnection(url);

            // SQL 文を生成
            Statement s = con.createStatement();
            String sql = "SELECT * FROM `users`";

            // クエリーを実行して結果セットを取得
            ResultSet rs = s.executeQuery(sql);

            // 検索された行数分ループ
            while(rs.next()){
                String name     = rs.getString("name");  // ユーザー名
                String password = rs.getString("pass");  // パスワード

                // 表示
System.out.println(name + " / " + password);
            }

            // データベースから切断
            s.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
コンパイル
# javac MySQLJDBCTest.java
実行
# java MySQLJDBCTest
Java で MySQL にアクセスするには、MySQL 用の JDBC のドライバが必要である。このドライバは MySQL のサイトから入手できる (MySQL Connector/J とあるので、安定版または最新バージョンをダウンロードする)。 ダウンロードしたものを解凍すると、mysql-connector-java-x.x.xx-bin.jar というファイルがあるはずなので、これを (Linux の場合は) $JAVA_HOME/jre/lib/ext にコピーする。ここに JAR ファイルを置いておく限り、このドライバ (JAR ファイル) に対する CLASSPATH は特に設定する必要はない。 以下はデータベース中の users テーブルから、name と password という 2つのフィールドを読み出す例である (MySQLJDBCTest.java という名前で保存)。
import java.sql.*;

public class MySQLJDBCTest {

    public static void main(String[] args) {

        try {
            // ドライバをロード
            Class.forName("org.gjt.mm.mysql.Driver");

            // データベースへ接続
            String url = "jdbc:mysql:///データベース名?&user=ユーザー名&password=パスワード&"
                       + "useUnicode=true&characterEncoding=UTF-8";
            Connection con = DriverManager.getConnection(url);

            // SQL 文を生成
            Statement s = con.createStatement();
            String sql = "SELECT * FROM `users`";

            // クエリーを実行して結果セットを取得
            ResultSet rs = s.executeQuery(sql);

            // 検索された行数分ループ
            while(rs.next()){
                String name     = rs.getString("name");  // ユーザー名
                String password = rs.getString("pass");  // パスワード

                // 表示
System.out.println(name + " / " + password);
            }

            // データベースから切断
            s.close();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
コンパイル
# javac MySQLJDBCTest.java
実行
# java MySQLJDBCTest