2010-08-14 69 views
1

编辑: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)

回答

2
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); 
} 
0

对于一些在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/