Javaでbyteの配列を16進数文字列に変換する方法

提供: Java入門
移動: 案内検索
スポンサーリンク

Javaのbyte配列(byte[])を16進数文字列に変換する方法を紹介します。ここでは、String.format()を利用します。

読み方

byte
ばいと

概要

以下の例では、byte[]のデータを16進数文字列に変換します。String.format() を利用して、力技で変換しています。

StringBuilder sb = new StringBuilder(2 * byte.length);
for(byte b: cipher_byte) {
	sb.append(String.format("%02x", b&0xff) );
}
System.out.println( sb );

Integer.toHexString() を利用する方法もありますが、 0 埋めをしないので、使用していません。

ソースコード

以下のソースコードは、文字列 hoge の SHA-256の値を計算し、16進数に変換して、表示するプログラムです。

/*
 * SHA2.java
 * Copyright (C) 2015 kaoru <kaoru@localhost>
 */
import java.security.MessageDigest;
class SHA2 {
        public static void main(String[] args) {
                String text = "hoge";
                byte[] cipher_byte;
                try{
                        MessageDigest md = MessageDigest.getInstance("SHA-256");
                        md.update(text.getBytes());
                        cipher_byte = md.digest();
                        StringBuilder sb = new StringBuilder(2 * cipher_byte.length);
                        for(byte b: cipher_byte) {
                                sb.append(String.format("%02x", b&0xff) );
                        }
                        System.out.println( sb );
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

コンパイル

$ javac SHA2.java

実行例

sha256コマンドでhogeを計算した結果、SHA2.java と同じ結果が得られたことが確認できました。

$ java SHA2
ecb666d778725ec97307044d642bf4d160aabb76f56c0069c71ea25b1e926825
$ sha256 -s hoge
SHA256 ("hoge") = ecb666d778725ec97307044d642bf4d160aabb76f56c0069c71ea25b1e926825

関連項目



スポンサーリンク