是否有与Java MessageDigest等价的PHP

是否有与Java MessageDigest等价的PHP,java,php,encryption,sha256,Java,Php,Encryption,Sha256,我有一个Java方法需要用PHP实现。它是为了创建一个身份验证字符串来访问API。它由公司提供的代码和公司提供的API密钥组成,根据下面的Java示例,它还包括一个GMT时间戳(以分钟为单位) 根据文件,它说“时间戳计算为自epoch以来经过的分钟数。必须使用GMT时区来计算时间戳。如果请求服务器的系统时间与实际当前时间相差超过一分钟,则请求代码为400的服务器将拒绝该呼叫” 我必须提供作为参数的代码以及我创建的SHA-256加密令牌 以下是Java: String createToken()

我有一个Java方法需要用PHP实现。它是为了创建一个身份验证字符串来访问API。它由公司提供的代码和公司提供的API密钥组成,根据下面的Java示例,它还包括一个GMT时间戳(以分钟为单位)

根据文件,它说“时间戳计算为自epoch以来经过的分钟数。必须使用GMT时区来计算时间戳。如果请求服务器的系统时间与实际当前时间相差超过一分钟,则请求代码为400的服务器将拒绝该呼叫”

我必须提供作为参数的代码以及我创建的SHA-256加密令牌

以下是Java:

String createToken() {
    String token = "";

    MessageDigest lclMD = null;
    try {
        lclMD = MessageDigest.getInstance("SHA-256"); }
    catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    lclMD.update((EnvConstants.code + EnvConstants.api_key + Long.toString(getEpochMinutes())).getBytes());
    byte[] lclResult = lclMD.digest();

    sig = new String(Hex.encodeHex(lclResult));
    return token; 
}

long getEpochMinutes () {
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
    long now = System.currentTimeMillis();

    cal.setTimeInMillis(now);
    return (cal.getTimeInMillis() / 60000L); 
}
这是我在PHP中尝试过的:

$time = (string)time()/60;   // to get the minutes since epoch, I have also tried it not casting it to a string
$code = 'thisisthecode';
$api_key = 'XXXXXXX';
$hash = hash('sha256', $code . $api_key . $time);

$curl = curl_init();
$url = "http://api.url/user/XXXX?code=thisisthecode&token=$hash"; 
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
return $result;
当我运行这段代码时,我总是得到一个400错误的请求错误

说清楚一点,我不懂Java,现在我在猜测我是否对PHP足够了解,因为我无法让它工作

有人能帮我解决这个问题吗?我的头撞在水泥上了


谢谢你的帮助

$key=openssl\u摘要($stringSHA,'sha512',true)

$SHA=openssl_摘要($stringSHA,'sha512');但我不确定你在找什么,但这会将字符串转换为sha512..谢谢Dieter。我希望完全复制PHPIs中Java示例返回的内容,这对您的问题有用吗?