15

JWT を作成し、HMAC_SHA256 で署名したいと考えています。そのタスクには、jose4jを使用する必要があります。私は秘密に基づいて鍵を生成しようとしました:

SecretKeySpec key = new SecretKeySpec(("secret").getBytes("UTF-8"), AlgorithmIdentifiers.HMAC_SHA512);

ただし、HMAC_SHA256 を使用した署名には 512 ビットのキーが必要ですが、40 ビットのキーが生成されます。

  • 主な問題 - jose4j を使用して HMAC_SHA512 でトークンに署名する方法は?
  • 上記の問題を解決する私のアプローチによって作成された問題 - 秘密文字列に基づいて 512 ビット長の秘密鍵を作成する方法は?
4

3 に答える 3

9

一般的なアプローチは、シークレットを署名キーとして使用する前にハッシュすることです。

MessageDigest md = MessageDigest.getInstance("SHA-256");
String secret = "secret";
md.update(secret.getBytes("UTF-8"));
byte[] key = md.digest();

別の方法は、次のような方法でキーの長さの要件を緩和することです。

JwtConsumer jwtConsumer = new JwtConsumerBuilder()
     .setVerificationKey(new HmacKey(secret.getBytes())) 
     .setRelaxVerificationKeyValidation() // allow shorter HMAC keys when used w/ HSxxx algs 
     .build();
于 2015-08-16T19:07:49.307 に答える