0

私のscalaplayアプリケーションでコンシューマーシークレット/キーのペアを作成しようとしていますが、正しく機能させることができないようです。私は次のコードを持っています

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
}

しかし、「Anthony」のようなもののbaseStringを追加すると、常に次のような文字列が返されます

"[B@2008bf02" 

私はこのようなものを手に入れたいと思っていました

“w/FdJ7y1qwe3HX/VmPiACTn01Zc=“ 
4

1 に答える 1

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");
}
于 2012-10-23T00:14:24.517 に答える