123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package utils
- import (
- "crypto/rand"
- "crypto/rsa"
- "crypto/x509"
- "encoding/base64"
- "encoding/pem"
- "os"
- log "github.com/sirupsen/logrus"
- )
- var (
- Private = []byte(`-----BEGIN private-----
- MIICXQIBAAKBgQC32pYyKWAWiI4CWZzxLgpad2pz1r6F9opDJaNQvFTQJiQivHlh
- sHQvyZ90ZDZbDxxAX/sqK4HMkDfBPBmol4UHRg5kAv9xkVEmyBtoLLljYRszxOje
- 693EyKDAeME8KNVgLLaCsMuiyy2EaZMBGAvxSTmnd+t1pMjHHp8n7DGunwIDAQAB
- AoGBAJf9oftYDzKxs0yoDsGnwTFm1V9sYVdYKJc4L1pYR3lIfskkrOgguvyinyrW
- icUfqchiUL5c91JIy375E3E3yeV/xoS4y+6Cf0dAiq/iiGoBqBtzbSpF+UA0o/pP
- 3yMu8WaueG2En8mpTN9kAcW9Cn279PtwMALfKmW1/NZdXJ2pAkEA8RL0gXGukWOZ
- auEMxp0OWvQm0R/lVz2XyfjSVQWfDT2vGMgDv6+2bUeT8DomJmx3oWQX2gq0uidb
- /Ir9rEvhWwJBAMM8r8GVva1gicTswBWi7tDHC8OGYY9a0MQ3IPCKDCC513Se0SJi
- rhSU1IL2PBBgnSS/atwJ+FwY6Cbynrs1Rw0CQQDBKJ3upcboyXQgtgfFkAvzhpMf
- lr3s4/YeJ5dn9mQVeOo2IfUW/tRdxS9dGUp+GQTVtNyDoXZjfavvsvJEvlvnAkAJ
- h6nQmj2S+/ZdnWzW4YgkusKRPbr/Y2BzY3mBJEvpQQkKUUJGGmkC6izhY6GU7xJc
- m9dcfEQaQsD6PbePzc71AkBEanolW+cy+XzlqxQPoR64h9oP+QaVS0mlD+u3YBWn
- M0OVEU2E6lZ2xR25WmM/VAplMzklBlfIhsfkvBDHFUDX
- -----END private-----`)
- Public = []byte(`-----BEGIN public-----
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC32pYyKWAWiI4CWZzxLgpad2pz
- 1r6F9opDJaNQvFTQJiQivHlhsHQvyZ90ZDZbDxxAX/sqK4HMkDfBPBmol4UHRg5k
- Av9xkVEmyBtoLLljYRszxOje693EyKDAeME8KNVgLLaCsMuiyy2EaZMBGAvxSTmn
- d+t1pMjHHp8n7DGunwIDAQAB
- -----END public-----`)
- )
- func initrsa() {
- //GenRsaKey(1024)
- // str := RsaEncrypt("你好")
- // log.Debug(str)
- // log.Debug(RsaDecrypt(str))
- }
- func RsaEncrypt(orig string) (encodestr string) {
- origData := []byte(orig)
- block, _ := pem.Decode(Public)
- if block == nil {
- log.Error("public key error")
- return
- }
- pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
- if err != nil {
- return
- }
- pub := pubInterface.(*rsa.PublicKey)
- res, err := rsa.EncryptPKCS1v15(rand.Reader, pub, origData)
- if err == nil {
- encodestr = base64.StdEncoding.EncodeToString(res)
- } else {
- log.Error("rsa en err", err.Error())
- }
- return
- }
- // 解密
- func RsaDecrypt(text string) (orig string) {
- ciphertext, err := base64.StdEncoding.DecodeString(text)
- if err != nil {
- log.Error("ras De error", err.Error())
- return
- }
- block, _ := pem.Decode(Private)
- if block == nil {
- log.Error("private key error!")
- return
- }
- priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)
- if err != nil {
- return
- }
- res, err := rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext)
- if err == nil {
- orig = string(res)
- } else {
- log.Error("ras De error", err.Error())
- }
- return
- }
- func GenRsaKey(bits int) error {
- // 生成私钥文件
- privateKey, err := rsa.GenerateKey(rand.Reader, bits)
- if err != nil {
- return err
- }
- derStream := x509.MarshalPKCS1PrivateKey(privateKey)
- block := &pem.Block{
- Type: "private",
- Bytes: derStream,
- }
- file, err := os.Create("private.pem")
- if err != nil {
- return err
- }
- err = pem.Encode(file, block)
- if err != nil {
- return err
- }
- // 生成公钥文件
- publicKey := &privateKey.PublicKey
- derPkix, err := x509.MarshalPKIXPublicKey(publicKey)
- if err != nil {
- return err
- }
- block = &pem.Block{
- Type: "public",
- Bytes: derPkix,
- }
- file, err = os.Create("public.pem")
- if err != nil {
- return err
- }
- err = pem.Encode(file, block)
- if err != nil {
- return err
- }
- return nil
- }
|