我正在尝试转换此php函数:
string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = false ] )
其中算法= SHA-256,数据= dd-mm-yyy,密钥=“密码”
我已经用Message Digest编写了一个代码,该代码计算了连接数据+键上的sha-256,但是输出与php函数的输出不同。
任何将此PHP函数写入android java的帮助吗?
实际上,我为String键设置了个人密码,为String设置了日期。现在,当我运行该应用程序并生成添加到网址中的hmacsha256时,生成的hmacSha256值与在iOS中计算的hmacSha256不同。
我使用了从一个答案改编的这段代码:
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不同。怎么了
最佳答案
这是我执行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) {
// ...
}
}