2

EC_Key を使用して OpenSSL で公開鍵と秘密鍵を作成し、x、y、および d コンポーネントを BigNum 形式で作成しました。

ここで、JWK 標準に従って、これらの Bignum 値を Base64URLEncoded 値に変換したいと考えています。

例えば

{
 "kty":"EC",
 "crv":"P-256",
 "x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
 "y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
 "use":"enc",
 "kid":"1"
}

現在x coordinate76638B4D8040018F834AE6D6540B20E1CA95F6A8C61BE6118062918904B5C5A7

ObjC で OpenSSL と JSONKit を使用している間

if (!bigNum) return nil;

/* converting from BIGNUM to binary */
int len = BN_num_bytes(bigNum);
unsigned char *buf = NULL;
buf = (unsigned char *) OPENSSL_malloc (len);
len = BN_bn2bin(bigNum, buf);
NSData *pubData =  [NSData dataWithBytesNoCopy:buf length:len freeWhenDone:YES];


NSString *base64EncodedString = [pubData base64EncodedString];
return [base64EncodedString stringWithBase64URLEncoding];

それを変換すると、次のようになりBase64URL encoded stringます

x:dmOLTYBAAY-DSubWVAsg4cqV9qjGG-YRgGKRiQS1xac

ただし、Jose4J を使用してサーバー上で同じ x 座標をデコードすると、次のように返されます。

53548795424402895049922051400723229099982122334687022963594437126482323424679

これは、Web サイトで入手できるものと似ています: http://www.mobilefish.com/services/big_number/big_number.php

このことから、BigInt の 10 進表現であることが示されます。

すなわち

  1. BigInt を Decimal に変換

  2. 10 進数から ASCII 文字列へ

  3. そして、Base64 url​​ エンコーディングへ。

ただし、このプロセスを適用している間、サーバーは JOSE4J ライブラリの JWK パラメータを受け入れません。

4

1 に答える 1