如何解决JWT ES256 base64编码EC密钥
当我尝试base64urlencode
的公钥x
和y
(ES256)与JSON Web令牌一起使用时,我遇到了填充问题。
我有x
和y
作为字符串,并且密钥都长64个字符(64 hex chars = 32 byte = 256 bit
),这是ES256的正确长度。当我尝试转换用于JSON Web令牌的密钥时,必须存在一些填充错误(?),因为base64urlencoded版本应为32个八位字节。但是,y长33个八位位组吗?
我假设问题出在BigInteger
转换上,但是我不确定如何验证这种猜测或如何解决。
public void test() {
String pubX = "588ba2025dc9d8ce31f3dd55aa38f2635947cda89f97864405bfa1dbe0fae57c";
String pubY = "a2ea7858b8276917f18b043486d7f55d18241b1bd34c66a4ab507fa259c9798a";
System.out.println("pubX.length=" + pubX.length());
System.out.println("pubY.length=" + pubY.length());
String x = encodeBase64(new BigInteger(pubX,16).toByteArray());
String y = encodeBase64(new BigInteger(pubY,16).toByteArray());
System.out.println("x="+x);
System.out.println("x.length (octets)=" + java.util.Base64.getUrlDecoder().decode(x).length);
System.out.println("y="+y);
System.out.println("y.length (octets)=" + java.util.Base64.getUrlDecoder().decode(y).length);
}
public String encodeBase64(byte[] input) {
// RFC7515 specifies that we must not use padding for base64urlencode
return java.util.Base64.getUrlEncoder().withoutPadding().encodetoString(input);
}
输出:
pubX.length=64
pubY.length=64
x=WiuiAl3J2M4x891VqjjyY1lHzaifl4ZEBb-h2-D65Xw
x.length (octets)=32
y=AKLqeFi4J2kX8YsENIbX9V0YJBsb00xmpKtQf6JZyXmK
y.length (octets)=33
上下文:我正在开发Acme客户端,但消息被拒绝,并显示密钥填充不正确的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。