如何在C#(用jose-jwt库)将Base64验证密钥转为EC(ES256)公钥
在C#中用jose-jwt库解析ES256公钥(对应Java实现)
直接上和你提供的Java逻辑完全匹配的C#代码:
using System; using System.Security.Cryptography; using Jose; // 替换为Play Console提供的Base64编码密钥 string base64EncodedKey = "你的Base64密钥字符串"; // 解码Base64为字节数组(对应Java的Base64.decode) byte[] keyBytes = Convert.FromBase64String(base64EncodedKey); // 加载X509格式的EC公钥(对应Java的KeyFactory.generatePublic(X509EncodedKeySpec)) using (ECDsa ecdsa = ECDsa.Create()) { ecdsa.ImportSubjectPublicKeyInfo(keyBytes, out _); // 示例:用该公钥验证ES256签名的JWT string jwtToken = "待验证的JWT令牌"; var verifiedPayload = JWT.Decode(jwtToken, ecdsa, JwsAlgorithm.ES256); }
关键说明:
Convert.FromBase64String完成Java中Base64.decode的Base64解码工作。ECDsa.ImportSubjectPublicKeyInfo方法负责解析X509编码的EC公钥,和Java里通过X509EncodedKeySpec生成公钥的逻辑一致。- 如果你拿到的是URL安全的Base64(部分场景下Play Console会返回这种格式,用
-和_替代+和/,无Padding),需要先转换为标准Base64:
// 处理URL安全Base64 string standardBase64 = base64EncodedKey.Replace('-', '+').Replace('_', '/'); // 补全必要的Padding while (standardBase64.Length % 4 != 0) { standardBase64 += '='; } byte[] keyBytes = Convert.FromBase64String(standardBase64);
内容的提问来源于stack exchange,提问作者Chetan Patil
相关产品推荐
相关产品推荐

