2010-08-14 64 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/