非法基本64字符2D

发布于 2025-02-12 03:59:35 字数 1709 浏览 1 评论 0原文

我正在构建Java Spring Boot Auth Service,该服务创建了JWT和一个使用JWT的资源服务。

我使用以下方式创建了一个公共/私钥对:

keytool -genkeypair -alias myalias -keyalg RSA -keypass password1 -keystore myclient.jks -storepass password1

然后,我使用以下方式导出了公共密钥:

keytool -list -rfc --keystore myclient.jks | openssl x509 -inform pem -pubkey

将公共密钥存储在应用程序中。

    jwt.publicKey = -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd
l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V
4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx
4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ
BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF
E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR
4wIDAQAB
-----END PUBLIC KEY-----

之后我

@Value("${jwt.publicKey}")
private String publicKey;

public Claims decodeJWT(String jwt) {

    KeyFactory kf;
    PublicKey key;

    try{
        kf = KeyFactory.getInstance("RSA");
        X509EncodedKeySpec pubKeySpecX509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
        key = kf.generatePublic(pubKeySpecX509EncodedKeySpec);
    } catch (Exception e) {
        throw new RuntimeException("Failed to generate Public Key", e);
    }

    //This line will throw an exception if it is not a signed JWS (as expected)
    return Jwts.parser()
            .setSigningKey(key)
            .parseClaimsJws(jwt).getBody();
}

因此, :

java.lang.IllegalArgumentException: Illegal base64 character 2d

谁能在这里发现我做错了什么?

干杯, 克里斯

I am building a java spring boot auth service that creates a jwt and a resource service that uses that jwt afterwards.

Therefore I created a public/private key pair using:

keytool -genkeypair -alias myalias -keyalg RSA -keypass password1 -keystore myclient.jks -storepass password1

I then exported the public key using:

keytool -list -rfc --keystore myclient.jks | openssl x509 -inform pem -pubkey

Afterwards I stored the public key in the application.properties file in the resource server:

    jwt.publicKey = -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd
l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V
4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx
4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ
BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF
E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR
4wIDAQAB
-----END PUBLIC KEY-----

However when I then try to decode the JWT:

@Value("${jwt.publicKey}")
private String publicKey;

public Claims decodeJWT(String jwt) {

    KeyFactory kf;
    PublicKey key;

    try{
        kf = KeyFactory.getInstance("RSA");
        X509EncodedKeySpec pubKeySpecX509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
        key = kf.generatePublic(pubKeySpecX509EncodedKeySpec);
    } catch (Exception e) {
        throw new RuntimeException("Failed to generate Public Key", e);
    }

    //This line will throw an exception if it is not a signed JWS (as expected)
    return Jwts.parser()
            .setSigningKey(key)
            .parseClaimsJws(jwt).getBody();
}

I get an error:

java.lang.IllegalArgumentException: Illegal base64 character 2d

can anyone spot what I'm doing wrong here?

Cheers,
Kris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三生一梦 2025-02-19 03:59:35

我有一个问题。我使用以下命令,解决了我的问题。显然,此问题是由于字符串中的负字符而发生的。

new String(Base64.getUrlDecoder().decode());

I had such a problem. I used the following command and my problem was solved. Apparently, this problem occurs because of the minus character in the string.

new String(Base64.getUrlDecoder().decode());
比忠 2025-02-19 03:59:35

your public key should not have Illegal character like '-' '\n' ...

your public key is

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kdl+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJBSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpFE0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR4wIDAQAB

public static PublicKey getPublicKeyFromX509(String signType, String signKey) throws Exception {
    KeyFactory keyFactory = KeyFactory.getInstance(signType);
    byte[] encodedKey = signKey.getBytes();
    encodedKey = Base64.getDecoder().decode(encodedKey);
    return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
}

public static void main(String[] args) throws Exception {
    PublicKey rsa = getPublicKeyFromX509("RSA", "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd" +
            "l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V" +
            "4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx" +
            "4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ" +
            "BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF" +
            "E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR" +
            "4wIDAQAB");
    System.out.println(rsa.toString());
}

your public key should not have Illegal character like '-' '\n' ...

your public key is

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kdl+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJBSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpFE0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR4wIDAQAB

public static PublicKey getPublicKeyFromX509(String signType, String signKey) throws Exception {
    KeyFactory keyFactory = KeyFactory.getInstance(signType);
    byte[] encodedKey = signKey.getBytes();
    encodedKey = Base64.getDecoder().decode(encodedKey);
    return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
}

public static void main(String[] args) throws Exception {
    PublicKey rsa = getPublicKeyFromX509("RSA", "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAilGFaGPnAThX75U5w3kd" +
            "l+McOglx+wSckiBgvgomO8PkwFX3g8YaKoIsKl4FnBab5o3gylg1X0NEqdadzY/V" +
            "4SxCN1ED2y4i55BbHQ2eVAP2fNdsn0kB7GHxJsIu0hlaZSfjO7W9qtOExB4Y9LUx" +
            "4UxGckRZFoF8zdtG9gDWgFdRxrWDZ6hfsKTm3aAOhL4GpCafGDiwedM9S6f6HWGJ" +
            "BSg+aBFWtafebnei1IRNtnRBvZWND3Etj3K9nqOOwrTs8o9f3fIx5NUd4bHkBBpF" +
            "E0IXpkiZKCeLQ3kaEttWwnqUSE2WZKIPfoCc6PNVXX3FVkOJOO5/MPl/RtoOnkqR" +
            "4wIDAQAB");
    System.out.println(rsa.toString());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文