我使用 EC_Key 在 OpenSSL 中创建了公钥和私钥,并具有 BigNum 格式的 x、y 和 d 组件。
现在我想按照 JWK 标准将这些 Bignum 值转换为 Base64URLEncoded 值。
例如
{
"kty":"EC",
"crv":"P-256",
"x":"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
"y":"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
"use":"enc",
"kid":"1"
}
目前x coordinate
是76638B4D8040018F834AE6D6540B20E1CA95F6A8C61BE6118062918904B5C5A7
在 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
这类似于网站上提供的: http ://www.mobilefish.com/services/big_number/big_number.php
由此表明它是 BigInt 的十进制表示
IE
将 BigInt 转换为十进制
十进制到 ASCII 字符串
然后到 Base64 url 编码。
但是在应用此过程时,服务器不接受 JOSE4J 库中的 JWK 参数。