如何解决使用 phpseclib3
从 Azure B2C 模数和指数生成公钥的大多数示例使用 PHPseclib 并将 XML 字符串传递给库以生成公钥。
然而,PHPseclib3 似乎通过提供一个 PublicKeyLoader 来改变这一点,它接受一个键控数组,其中键是 e 和 n 作为 BigInteger 实例的指数和模数。
需要对 Azure B2C 提供的 e 和 n 值进行哪些转换才能使其适合与 PublicKeyLoader 一起使用?
旧版本的 PHPseclib 的许多示例都会从 base64url 转换为 base64,但我不知道这是否纯粹是为了 XML 转换方法的好处,以及是否可以与 BigInteger 函数一起使用。
此公钥的生成是为了通过 lcobucci/jwt 验证访问令牌签名。
解决方法
经过一些实验,进一步搜索可以使用以下方法。
将每个值从 base64url 转换为 base64 并解码。您可能喜欢使用 PHP 包 spomky-labs/base64url。
从十六进制解包一个值
$value = unpack('H*',$value);
然后转换为 BigInteger,使用基数 16
new BigInteger($value[1],16);
唯一需要注意的是,一些 Base64URL 解码示例在准备 base64_decode 时会添加填充。引用的库没有,但对我有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。