2012-10-22 4 views
0

내 스칼라 재생 응용 프로그램에서 소비자 비밀/키 쌍을 만들려고 시도하지만임이 제대로 작동하지 않는 것 같습니다. 는 다음 코드OAuth Consumer Secret 스칼라 소비자 키 생성

import org.apache.commons.codec.binary.Base64 
import javax.crypto.{KeyGenerator, Mac, SecretKey} 
import javax.crypto.spec.SecretKeySpec 

def hmacSha1(baseString:String) : String = { 
    val MAC_NAME = "HmacSHA1" 
    val keygen = KeyGenerator.getInstance(MAC_NAME); 
    val macKey = keygen.generateKey(); 
    val mac = Mac.getInstance(MAC_NAME); 
    val secret = new SecretKeySpec(macKey.getEncoded(), mac.getAlgorithm()); 
    mac.init(secret); 
    val digest = mac.doFinal(s.getBytes()); 
    val result= new binary.Base64().encode(digest) 
    result.toString 
} 

을 가지고 있지만 내가 "앤서니"같은 것을 위해 baseString에 추가 할 때 난 항상 다시 내가 기대했다으로이

"[[email protected]" 

과 같이 보이는 문자열을 얻을

“w/FdJ7y1qwe3HX/VmPiACTn01Zc=“ 
+0

binary.Base64를() - org.apache.commons.codec.binary.Base64에 대한 그 짧은? –

+0

옙 나는 내 질문을 업데이트 할 것이다 –

답변

1

인코딩 된 바이트 배열을 문자열로 올바르게 변환하지 않습니다. Base64 클래스에는 도움이되는 메소드가 있습니다.

mac.init(secret); 
    val digest = mac.doFinal(s.getBytes()); 
    new binary.Base64().encodeBase64String(digest); 
} 

더 많은 전통적인 방법은 다음과 같습니다 : 그냥이 할

mac.init(secret); 
    val digest = mac.doFinal(s.getBytes()); 
    val result= new binary.Base64().encode(digest) 
    new String(result, "ASCII"); 
} 
+0

고마워! 이제 결과 "3vZ4DTt/qy/DmHER8OHdmW1TQ50 ="에 대해 다음을 얻습니다. –

관련 문제