つい先日、Androidアプリと弊社で取り組んでいるWEBサービスのデータベースとを連携させる処理を実装しました。

JSON形式のデータをAndroidアプリ側からPOSTして、サーバー側では受け取ったデータをもとに色々DBに保存するという仕組みです。

しかし、JSON形式のデータを生成する際に、ハッシュ値がHMAC-SHA256方式になったため、ちょっと手こずりました。

今回は、それの解説です。

 

まずは、メインのActivityの方でハッシュ生成用のクラスを作成しましょう。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//ハッシュ値にしたい文字列
String base_str = "hoge";
//ハッシュを生成する
String hash = HmacMD5.get(base_str);

 

つづいて、クラス内で実際にハッシュを生成します。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class HmacMD5 {

//生成方式:HMAC-SHA256
private static final String ALGORISM = "hmacSHA256";
//ハッシュのSALT
private static final String S = "piyo";

public static String get(String str) {
SecretKeySpec secretKeySpec = new SecretKeySpec(S.getBytes(), ALGORISM);
try {
Mac mac = Mac.getInstance(ALGORISM);
mac.init(secretKeySpec);
byte[] result = mac.doFinal(str.getBytes());
return byteToString(result);
}
catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
catch (InvalidKeyException e) {
e.printStackTrace();
}
return "";
}

private static String byteToString(byte [] b) {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < b.length; i++) {
int d = b[i];
d += (d < 0)? 256 : 0;
if (d < 16) {
buffer.append("0");
}
buffer.append(Integer.toString(d, 16));
}
return buffer.toString();
}

}

特に大事なのが、

//生成方式:HMAC-SHA256
private static final String ALGORISM = "hmacSHA256";
//ハッシュのSALT
private static final String S = "piyo";

の2行です。

ALGORISMの中身を変えることで様々な形式に対応することができます。

SALTの設定も忘れずに。

 

これを、実行して画面に表示されるようにしました。

 

 

 

 

 

 

 

 

 

単純に、TextViewに文字が表示されるだけのレイアウトです。

TextViewにsetTextしていない状態だと、↓コレなんですが……

 

 

 

 

 

 

 

 

 

 

 

 

 

 

さっき生成したハッシュを、setTextして起動すると……

 

 

 

 

 

 

 

 

 

 

こんな感じになります!

これでハッシュの生成はできるようになるはずです!

 

最後に……

これができるまでウンウン悩んでまして、Twitterで助けを求めたところ、先輩プログラマーさんがすぐに反応してくれました。

そのとき、教えてくれたご自身のブログのページが↓です。

今回の記事は、ほぼこのページの丸写しのようなものです。

この場を借りてお礼させていただきます。本当にありがとうございましたm(._.)m

Post Navigation