You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
package tools
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/farmerx/gorsa"
|
|
"github.com/gin-gonic/gin"
|
|
jsoniter "github.com/json-iterator/go"
|
|
)
|
|
|
|
var pubKey = `-----BEGIN PUBLIC KEY-----
|
|
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDta5dZMmrBSJHelR8/R9VIdJ1w
|
|
2oSZLoGKPrcvhGf/1MRUJC07f2b8m7OuqVmK4fpCXLMHOqAY+gOMkrdqSgBuAIkI
|
|
rxeb4/vN2v5zy1+azY5XMwZW8fgLuYvqsr7tAnFqe4BZj3qXOhNI+IBUosoLZe4o
|
|
mxPhFWhufdp5lsPMrwIDAQAB
|
|
-----END PUBLIC KEY-----
|
|
`
|
|
|
|
var privateKey = `-----BEGIN PRIVATE KEY-----
|
|
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAO1rl1kyasFIkd6V
|
|
Hz9H1Uh0nXDahJkugYo+ty+EZ//UxFQkLTt/Zvybs66pWYrh+kJcswc6oBj6A4yS
|
|
t2pKAG4AiQivF5vj+83a/nPLX5rNjlczBlbx+Au5i+qyvu0CcWp7gFmPepc6E0j4
|
|
gFSiygtl7iibE+EVaG592nmWw8yvAgMBAAECgYEA6YpWHEV9wZby9fHWBNdSM62S
|
|
WTp6CHw4rJY4d6NU8dCHNwVHASm3UnCOdRbcn8Ld+31YFZpTdX4pE5QWm5UjiSwu
|
|
wlYEs7VBrwlQKPFdEXQIrcHci6addeItbouHNynkA7kXCYCiulI2zYS1aXcJQuDm
|
|
5K5qCWekbk8IEMBGL7ECQQD46pu/NrU+xw0BT83LPCnrfGZp8baNe61OsMe95smG
|
|
Qm3rccdUBStXdtY7sDMeyuy0JjaL8F1c8xpCLdgjCQG9AkEA9C07TaXJ2OFX7icC
|
|
0pUEySer0krTapbEQNxLEYpRh4c5wr2nbmQSabP3TWFyuPfMLLX7ZNkImCZ0nY9j
|
|
cjmQ2wJARIaB3gA3oVK3F9dadkrX14Zlw2DRut2DdphgRL1WWWnMTPcDwvOxXODQ
|
|
VZpKWH3Q8D9c4OWJLl+WqQVp7Ss7mQJAUMGg6nZZgqRMu5QlZ9YnRgwb1KowsAD7
|
|
GWSCY2O2wTclEFY/SNBKErGVqf7/vVMfMO5jHaB2KjQVv4KL5lxJnwJAJCy7JqP1
|
|
DM3i6fWNpeV7KM7zNzdNWgNcisHN3AExewrfEOS3miziCT+fpPPjIADuUhMqNpvi
|
|
QsdhEJur0FtjhA==
|
|
-----END PRIVATE KEY-----
|
|
`
|
|
|
|
var once sync.Once
|
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
|
|
|
func init() {
|
|
once.Do(func() {
|
|
if err := gorsa.RSA.SetPublicKey(pubKey); err != nil {
|
|
panic(err)
|
|
}
|
|
if err := gorsa.RSA.SetPrivateKey(privateKey); err != nil {
|
|
panic(err)
|
|
}
|
|
})
|
|
}
|
|
|
|
type EncPacket struct {
|
|
Recook string `json:"recook"`
|
|
}
|
|
|
|
// PrivateKeyEncrypt 私钥加密
|
|
func PrivateKeyEncrypt(data interface{}) *gin.H {
|
|
bytes, err := json.Marshal(data)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
str, err := gorsa.RSA.PriKeyENCTYPT(bytes)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return &gin.H{
|
|
"recook": string(str),
|
|
}
|
|
}
|
|
|
|
// PrivateKeyDecrypt 私钥解密
|
|
func PrivateKeyDecrypt(data []byte) interface{} {
|
|
decData, err := gorsa.RSA.PriKeyDECRYPT(data)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
var enc EncPacket
|
|
err = json.Unmarshal(decData, &enc)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return &enc.Recook
|
|
}
|