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
}