登录
首页 >  Golang >  Go问答

RS256 消息对于 RSA 公钥大小来说太长 - 签名 JWT 时出错

来源:stackoverflow

时间:2024-04-01 12:15:25 423浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《RS256 消息对于 RSA 公钥大小来说太长 - 签名 JWT 时出错》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在使用 https://github.com/dgrijalva/jwt-go 使用 256 位 pem 私钥构建 jwt。我正在使用 signingmethodrs256 来签署 jwt:

signBytes, _ := ioutil.ReadFile(privKeyPath)
signKey, err := jwt.ParseRSAPrivateKeyFromPEM(signBytes)
token := jwt.NewWithClaims(jwt.SigningMethodRS256, middleware.CognitoAccessTokenClaim{
    CustomArray:  []string{"testString"},
    StandardClaims: jwt.StandardClaims{
    ExpiresAt: 1500,
    },
})
jwtString, err := token.SignedString(signKey)

在最后一行,我在签署 jwt 时收到错误:crypto/rsa:消息对于 rsa 公钥大小 来说太长。有谁知道是什么原因造成的? pem 文件的大小似乎正确。


解决方案


您需要将消息拆分为块

func EncryptOAEP(hash hash.Hash, random io.Reader, public *rsa.PublicKey, msg []byte, label []byte) ([]byte, error) {
    msgLen := len(msg)
    step := public.Size() - 2*hash.Size() - 2
    var encryptedBytes []byte

    for start := 0; start < msgLen; start += step {
        finish := start + step
        if finish > msgLen {
            finish = msgLen
        }

        encryptedBlockBytes, err := rsa.EncryptOAEP(hash, random, public, msg[start:finish], label)
        if err != nil {
            return nil, err
        }

        encryptedBytes = append(encryptedBytes, encryptedBlockBytes...)
    }

    return encryptedBytes, nil
}

func DecryptOAEP(hash hash.Hash, random io.Reader, private *rsa.PrivateKey, msg []byte, label []byte) ([]byte, error) {
    msgLen := len(msg)
    step := private.PublicKey.Size()
    var decryptedBytes []byte

    for start := 0; start < msgLen; start += step {
        finish := start + step
        if finish > msgLen {
            finish = msgLen
        }

        decryptedBlockBytes, err := rsa.DecryptOAEP(hash, random, private, msg[start:finish], label)
        if err != nil {
            return nil, err
        }

        decryptedBytes = append(decryptedBytes, decryptedBlockBytes...)
    }

    return decryptedBytes, nil
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>