2014年12月22日月曜日

JavaとPHRでHMAC256→Base64の結果を合わせる

■Java
  
public static String getHmac256Base64() throws Exception {

        String signatureKey = "1ABCDEF3HIJKL2MNOP5RS"; // 暗号化キー
        String target = "targetString";            // 対象文字列

        // 秘密鍵の作成
        SecretKey secretKey = new SecretKeySpec(signatureKey.getBytes("UTF-8"),"HmacSHA256");

        // hmac256
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(secretKey);
        mac.update(target.getBytes("UTF-8"));
        byte[] encData = mac.doFinal();

        // PHPの形式に合わせる
        StringBuffer stringBuffer = new StringBuffer();
        for (byte b : encData) {
            stringBuffer.append(String.format("%02x", b));
        }
        String hmac256String = stringBuffer.toString();

        // base64エンコード
        byte[] encBase64 = Base64.encodeBase64(hmac256String.getBytes("UTF-8"));

        return new String(encBase64);
    }

■PHP
<?php
echo base64_encode( hash_hmac('sha256', 'targetString', '1ABCDEF3HIJKL2MNOP5RS',false ));
?>