【发布时间】:2017-04-24 12:30:08
【问题描述】:
我找到了 HMAC 签名的那些示例。
密码基密钥生成:
SecretKeySpec key = new SecretKeySpec(passowrd.getBytes("UTF-8"), "HmacSHA256");
随机密钥生成:
KeyGenerator gen = KeyGenerator.getInstance("HmacSHA256");
Key key = gen.generateKey;
生成 HMAC 签名
string passowrd = "password";
string data = "data";
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(key);
byte[] signature = mac.doFinal(data.getBytes("UTF-8"));
SecretKeySpec或KeyGenerator和Mac中的算法需要匹配吗?我尝试了以下不同的算法,但它确实有效。
Key key = new SecretKeySpec("pass".getBytes("UTF-8"), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(key);
byte[] signature = mac.doFinal(data.getBytes("UTF-8"));
下面的代码也有效
KeyGenerator gen = KeyGenerator.getInstance("HmacSHA256");
gen.init(keysize);
val key = gen.generateKey;
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);
byte[] signature = mac.doFinal(data.getBytes("UTF-8"));
我不确定它是否正确。实际上,当我在KeyGenerator 中更改算法时,它会返回不同长度的密钥,但我认为如果我将密钥大小指定为init(int keysize),它是相同的。如果一样的话,使用SecureRandom有什么区别?
【问题讨论】: