我试图在我的Scala Play应用程序中创建消费者秘密/键对,但我似乎无法使其正常工作。我有以下代码
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"之类的东西时,我总是会收回一个看起来像这样的字符串
"[B@2008bf02"
我希望得到看起来更像这个的东西
“w/FdJ7y1qwe3HX/VmPiACTn01Zc=“
您没有正确地将编码的字节数组转换为字符串。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");
}