Java 如何使用带密钥的SHA-1散列字符串?

Java 如何使用带密钥的SHA-1散列字符串?,java,android,security,hash,sha1,Java,Android,Security,Hash,Sha1,在iPhone上开发应用程序时,我将字符串转换为SHA1,有两种组合: 资料 钥匙 现在我正在开发一个Android应用程序,我没有任何关于如何使用key计算SHA1的例子 我非常感谢任何指导或帮助 [我当前使用的代码] 试试这样: private String sha1(String s, String keyString) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException

在iPhone上开发应用程序时,我将字符串转换为SHA1,有两种组合:

  • 资料
  • 钥匙
现在我正在开发一个Android应用程序,我没有任何关于如何使用key计算SHA1的例子

我非常感谢任何指导或帮助


[我当前使用的代码]


试试这样:

private String sha1(String s, String keyString) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {

SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);

byte[] bytes = mac.doFinal(s.getBytes("UTF-8"));

return new String( Base64.encodeBase64(bytes));

}

文档。

另一种解决方案是使用apache commons编解码器库:

@Grapes(
    @Grab(group='commons-codec', module='commons-codec', version='1.10')
)

import org.apache.commons.codec.digest.HmacUtils

HmacUtils.hmacSha1Hex(key.bytes, message.bytes)

转换时使用了什么代码?SHA-1和键。。是HMAC吗?这是为了什么?@thejh我正在以正确的方式更新答案。非常感谢您的回复,但是Base64.encodeBase64是从android.util.Base64或org.kobjects.Base64导入的?提前感谢。为了让您知道API android.util.Base64没有您提到的方法,我使用了:android.util.Base64.encode(bytes,0)在我的示例中,这是从org.apache.commons.codec.binary导入的,您可以从
@Grapes(
    @Grab(group='commons-codec', module='commons-codec', version='1.10')
)

import org.apache.commons.codec.digest.HmacUtils

HmacUtils.hmacSha1Hex(key.bytes, message.bytes)