0

从 Azure B2C 模数和指数生成公钥的大多数示例都使用 phpseclib 并将 XML 字符串传递到库以生成公钥。

但是,phpseclib3 似乎通过提供一个 PublicKeyLoader 来切换这一点,它采用一个键控数组,其中键是 e 和 n 的指数和模数作为 BigInteger 实例。

需要对 Azure B2C 提供的 e 和 n 值进行哪些转换以使其适合与 PublicKeyLoader 一起使用?

旧版本的 phpseclib 的许多示例将从 base64url 转换为 base64,但我不知道这是否纯粹是为了 XML 转换方法的好处,以及这是否适用于 BigInteger 函数。

生成此公钥的目的是通过 lcobucci/jwt 验证访问令牌签名。

4

1 回答 1

0

经过一番实验,进一步搜索可以使用以下方法。

将每个值从 base64url 转换为 base64 并解码。您可能想使用 PHP 包 spomky-labs/base64url。

从十六进制解包一个值

$value = unpack('H*', $value);

然后转换为 BigInteger,使用基数 16

new BigInteger($value[1], 16);

唯一需要注意的是,一些 Base64URL 解码示例在准备 base64_decode 时添加了填充。引用的库没有,但它对我有用。

于 2021-05-24T00:23:55.083 回答