出于某种原因,Quercus 和 GAE 上的 hmac_init 会出错。一种解决方案是使用上述 java 方法和类,将其导入 PHP 实例并调用计算。
1) 添加 scr/phpgae 目录 id 您还没有 2) 添加 phpgae.HmacSHA256 行到 src/WEB-INF/services/com.caucho.QuercusModule 3) 将 scr/phpgae/HmacSHA256.java 添加到您的 GAE 应用程序:
package phpgae;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import com.caucho.util.Base64;
import com.caucho.quercus.module.AbstractQuercusModule;
public class HmacSHA256 extends AbstractQuercusModule {
public String compute(String baseString, String key) throws InvalidKeyException, NoSuchAlgorithmException {
Mac mac;
mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
mac.init(secret);
byte[] digest = mac.doFinal(baseString.getBytes());
return Base64.encode(digest);
}
}
注意我在这里使用 SHA256。Eclipse 会即时编译所有内容,否则您需要手动编译类。
4) 在 PHP 上,你要做的是:
<?php
import phpgae.HmacSHA256;
$c = new HmacSHA256;
echo $c->compute( 'your base string' , 'your key' );
?>
您可以从以下网址找到更多关于 Google App Engine示例的实用PHP:http: //php-apps.appspot.com/