go语言RSA私钥加密 message too long for RSA key size

go语言 RSA使用私钥加密 crypto/rsa: message too long for RSA key size

需要加密的字符串长度大于117的情况下


fmt.Println(StringRSA("2023-06-25 14:55:38123456@qq.comNKFL9996552321145522222239895656663nihao1234567890112445http://www.baidu.com:88888/api/return/returnNotifyUrl10000", "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMiBmM3KNtI3eKNjbK2BxcPAXQ6bPDO4oNOvFg9eutM8fem2ScjEpJWXnm806ZZqED6Z9oNunX/2z4Zc67zI2rHSPc07MWNAtxLK3VcMb5lWHUgPP9COvNLl15O9twLGNCo8gSbDl0Q+0tsxwWSc7AINmpW/4sLrMO7N7ns6LQP5AgMBAAECgYEAu6HTbdjq3mP8p+G15NSJTjsomi+Y8cm37wBsw2thp6V3KwtkFtY2MqsVH3pDkXelxf9sWehcyVAdOd6g2CSZyaAtc7QGp2cGD1cHN9z+ZZuEbMvfVEova+lB/0Nur2NoeSOp/phYQkp9baVZbeUDQVX02HKEGyvbSPCFms/bbaUCQQDi/rmyptqK0IzvwjCl6rcpljA19rPccHGCQLvwhNHrxcjXlmfl/krZw3qUdHIOrf0JMbimQrXT1MVVuAU4DR8LAkEA4iBkZwiFuSEfgQHzZRpZ3IIMpevjioPjffh5u+X6mLRldZWC5tXvk/zY91Vw4+8Xm7cuwjTldzTN4lPCIrUbiwJAcyekTyRkU+2uwebyxQkIuHkvpgCsiBUnEFwEu+S1lfV1iSENPlk94bFQW0WjoxzS9DocIYRQN9GF9pFvXFsTtwJBAKvPltneVNRkAW7hD5EbI3ny6i9Letjs+vXkzIHi7LQIJSrhTdOca2tS63uJ1LurF5H97i4rSMp5OZGkuFXsq58CQACfSarzcF1b9FltLWWZM+oiC2EVw3IoKnd884wXsXiSKtQ8P1A7ASc6dDiB+w64X7bEmnX2dizUSjIZJSoVqXc="))


func StringRSA(v string, key string) string {
    privateKeyString, err := base64.StdEncoding.DecodeString(key)
    if err != nil {
        panic(err.Error())
    }
    privateKey, err := x509.ParsePKCS8PrivateKey(privateKeyString)
    if err != nil {
        panic(err.Error())
    }
    cipherText, err := rsa.SignPKCS1v15(nil, privateKey.(*rsa.PrivateKey), crypto.Hash(0), []byte(v))
    if err != nil {
        panic(err.Error())
    }
    c64 := base64.StdEncoding.EncodeToString(cipherText)
    return c64
}

crypto/rsa: message too long for RSA key size 出现字符串长度太长的错误

而我用.NET加密成功的后正确的字符串为

QMeq/dHIhWcus1lYQqhefpXBXupyAUypWBhwRAMo5JTVffaMmiU9Ww3GNcuXMYXVsEMeeuIqI4Gf4cWmyyXLN1z76+tTzEL7t+LN3EXiAHxUJb7KAkcPX8VWya3HrJxrxQVxhRtnEuTL9N0arQ1HL66POyg1a/3Ytg7uuhyYf3UOeCmC9ZHRwhMrUWNG+cMJswyUQglRt0dKD+B2cOCHvi1WOcFKt/xozQf/c0SEWXLFrLVsNEqKcPyOUIM62bgPIhntN7N1n4284+O6t58y1VW25iBHi+iyWD7107PRafIpcE+1XPTRzn56jhPtFAxUhxZagjpYqAAXbTQRbQaYIg==

该如何绕过这个限制长度的

分段加密

RSA 加密 的 密钥, 长度弄小一些, 比如 16位 ,24位等等

只能和分段解密一样 分段加密了


func StringRSA(v string, key string) string {
    privateKeyString, err := base64.StdEncoding.DecodeString(key)
    if err != nil {
        panic(err.Error())
    }
    privateKey, err := x509.ParsePKCS8PrivateKey(privateKeyString)
    if err != nil {
        panic(err.Error())
    }
    var offSet = 0
    var buffer = bytes.Buffer{}
    for offSet < len(v) {
        endIndex := offSet + (privateKey.(*rsa.PrivateKey).Size() - 11)
        if endIndex > len(v) {
            endIndex = len(v)
        }
        cipherText, err := rsa.SignPKCS1v15(nil, privateKey.(*rsa.PrivateKey), crypto.Hash(0), []byte(v[offSet:endIndex]))
        if err != nil {
            panic(err.Error())
        }
        buffer.Write(cipherText)
        offSet = endIndex
    }
    bytesDecrypt := buffer.Bytes()
    c64 := base64.StdEncoding.EncodeToString(bytesDecrypt)
    return c64
}