如何在GAE/J上创建OAuth HMAC-SHA1签名?
问题描述:
编辑:java equivalent to php's hmac-SHA1
(以及希望,试图a.t.m.)如何在GAE/J上创建OAuth HMAC-SHA1签名?
我的理解是,创建一个签名,我需要一个“基本字符串”和“关键”。我想我知道如何创建基本字符串,并且我假设我应该使用Google分配给我的应用的“OAuth Consumer Secret”作为密钥。
但我应该怎么做这两个获得签名? GAE/Java上是否有HMAC类?
它会发挥,如果我只是存储什么OAuth Playground为我产生的地方?它是如何做到的?或者OAuth签名是否有过期日期?
(我试过的AuthSub之前,但failed too,即使它看起来相当简单。此外OAuth的好像更“标准”给我,所以我想坚持使用OAuth)
答
public String computeHmac(String baseString, String key)
throws NoSuchAlgorithmException, InvalidKeyException, IllegalStateException, UnsupportedEncodingException
{
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
mac.init(secret);
byte[] digest = mac.doFinal(baseString.getBytes());
return Base64.encode(digest);
}
答
对于一些在Quercus和GAE上的原因hmac_init会给出错误。一种解决方案是使用上面提到的java方法和类,将它导入到PHP实例并调用compute。
1)添加SCR/phpgae你没有目录ID尚未 2)phpgae.HmacSHA256行添加到SRC/WEB-INF /服务/ 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会立即编译所有内容,否则需要手动complile类。
4)在PHP这里是你怎么做:
<?php
import phpgae.HmacSHA256;
$c = new HmacSHA256;
echo $c->compute('your base string' , 'your key');
?>
你可以找到更实际的PHP on Google App Engine例子:http://php-apps.appspot.com/