将hash_hmac转换为android java

时间:2015-04-27 12:28:02

标签: java php android sha

我正在尝试转换这个php函数:

string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )

其中algo = SHA-256,data = dd-mm-yyy,key =“password”

我编写了一个带有Message Digest的代码,用于在串联数据+键上计算sha-256,但输出与php函数的输出不同。

将这个php函数写入android java的任何帮助吗?

实际上,我为String键设置了个人密码,为String设置了日期。现在,当我运行应用程序并生成我添加到url get的hmacsha256时,我打印它的值hmacSha256与hmacSha256的不同形式计算到iOS中。

我使用的代码改编自一个答案:

String PRIVATE_KEY = (String) "asf";
String dateInString = "2015-04-26";  // Start date
String sdf = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String Token = (String) sdf + PRIVATE_KEY;

private static String toHexString(final byte[] bytes) {
    final Formatter formatter = new Formatter();
    for (final byte b : bytes) {
        formatter.format("%02x", b);
    }
    return formatter.toString();
}

public static String hmacSha256(final String PRIVATE_KEY, final String sdf) {
    try {
        final Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(PRIVATE_KEY.getBytes(), "HmacSHA256"));
        return toHexString(mac.doFinal(sdf.getBytes()));
    }
    catch (final Exception e) {
        // ...
    }
    return PRIVATE_KEY;
}

但是当我打印hmacSha256(sdf,PRIVATE_KEY)时,我的输出是:76934121da91e03df3ca531057cdca132ebc7fe37ba60fc12da11dba285e3ba2

这个值与iOS产生的hmacSha256不同。这里有什么问题。

1 个答案:

答案 0 :(得分:4)

这就是我实施HmacSHA256的方式:

private static String toHexString(final byte[] bytes) {
    final Formatter formatter = new Formatter();
    for (final byte b : bytes) {
        formatter.format("%02x", b);
    }
    return formatter.toString();
}

public static String hmacSha256(final String key, final String s) {
    try {
        final Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA256");
        return toHexString(mac.doFinal(s.getBytes()));
    }
    catch (final Exception e) {
        // ...
    }
}