Azure RSA HSM 签名 - base64 中的错误字符

Azure RSA HSM signing - bad chars in base64

我们正在尝试使用 Azure HSM 进行数字签名。不幸的是,我们从 PHP 和 HSM 得到的东西之间存在差异。

即PHP 使用 openssl_sign 方法签署的相同内容 returns

string(344) "SgPUHc0bKz9d6KetdnNZxIguqDmrj9+B9kQO0t3mxObZ2+EndJ0MEDIuYEcj20BaIlXuM+IAFz25jeZy7VnoGsq+r/L3nxi4b+C6HE7Nw1EyQ3Hz5Tm53bdjr0w25LDOvRFxnxqrzzkxo2K66/Lm0DHMs1r/7XcQhpYEKhZsMCwnk4KzPt3YdE/WpdO+yyVoaM19l+4vVu/GMOKLbQhTtNPEZ+2dw4YtIiUmJz/9o/ARdTaI8XMFWQxQCEgdnii+I1TuuQVKa2BQPPAPNYjJJFU2H9UzxXj1dKxHinCnW8jNZ57gf41PEypqtf8ebFSunWyxdtWdIQ+RjRoJoQLTxQ=="

Azure HSM 签名的内容如下所示

string(342) "SgPUHc0bKz9d6KetdnNZxIguqDmrj9-B9kQO0t3mxObZ2-EndJ0MEDIuYEcj20BaIlXuM-IAFz25jeZy7VnoGsq-r_L3nxi4b-C6HE7Nw1EyQ3Hz5Tm53bdjr0w25LDOvRFxnxqrzzkxo2K66_Lm0DHMs1r_7XcQhpYEKhZsMCwnk4KzPt3YdE_WpdO-yyVoaM19l-4vVu_GMOKLbQhTtNPEZ-2dw4YtIiUmJz_9o_ARdTaI8XMFWQxQCEgdnii-I1TuuQVKa2BQPPAPNYjJJFU2H9UzxXj1dKxHinCnW8jNZ57gf41PEypqtf8ebFSunWyxdtWdIQ-RjRoJoQLTxQ"

只有几处不同: 而不是 + char Azure HSM returns - 而不是 / char Azure HSM returns _ 并且未填充 Azure 的签名。

Base 64 不允许使用这些字符:https://en.wikipedia.org/wiki/Base64#Base64_table

有谁知道这些差异可能来自哪里?

Does anyone have an idea from where these differences may came from?

Azure 似乎使用 URL 安全的 base64,如您链接的 RFC 4648. You can find it in the “Variants summary table” section of the Wikipedia article 中所述。