鉴权前置知识:加密解密 === ### Base64编码实现: ``` input := []byte("hello") string := base64.StdEncoding.EncodeToString(input) // 序列化 de := base64.StdEncoding.DecodeString(string) //反序列化 string(de) string := base64.URLEncoding.EncodeToString(input) // URL序列化 de := base64.URLEncoding.DecodeString(string) //URL反序列化 string(de) ``` ### RSA265 非对称加密编码实现 非对称加密需要生成私钥和公钥 我们这里通过openssl来生成 我们现在的操作系统是ubuntu18.4 ``` apt-get update // 更新系统软化包缓存 apt-get install openssl -y // 安装openssl openssl genrsa -out app_private_key.pem 1024 // 生成ras256 私钥 在当前目录下 openssl rsa -in app_private_key.pem -pubout -out app_public_key.pem // 生成ras256公钥 在当前目录下 ``` 现在我们有了ras的私钥和公钥了 现在我们要实现加密解密模块 这个地方只要看懂就行 ``` /** Rsa256加密 param: origData原始数据 param: publicKey 公钥 */ func Rsa256Encrypt(origData,publicKey[]byte) ([]byte,error) { p, _ := pem.Decode(publicKey) if p == nil { return nil,errors.New("public key error") } pub, err := x509.ParsePKIXPublicKey(p.Bytes) if err != nil{ return nil,err } key := pub.(*rsa.PublicKey) return rsa.EncryptPKCS1v15(rand.Reader,key,origData) } /** Rsa256解密 param: ciphertext 密文 param: privateKey 私钥 */ func Rsa256Decrypt(ciphertext,privateKey []byte) ([]byte,error) { p, _ := pem.Decode(privateKey) if p == nil { return nil,errors.New("private key error") } key, e := x509.ParsePKCS1PrivateKey(p.Bytes) if e != nil { return nil,e } return rsa.DecryptPKCS1v15(rand.Reader,key,ciphertext) } ``` 现在我们新建一个测试文件来测试以下 ``` func TestRSA(t *testing.T) { bytes, e := ioutil.ReadFile("../app_public_key.pem") if e != nil { t.Fatal(e.Error()) } ordata := []byte("123456") encrypt, e := utils.Rsa256Encrypt(ordata, bytes) if e != nil { t.Fatal(e.Error()) } s := base64.URLEncoding.EncodeToString(encrypt) file, e := ioutil.ReadFile("../app_private_key.pem") if e != nil { t.Fatal(e.Error()) } decodeString, _ := base64.URLEncoding.DecodeString(s) decrypt, e := utils.Rsa256Decrypt([]byte(decodeString), file) if e != nil { t.Fatal(e.Error()) } t.Log(s) t.Log(encrypt) t.Log(string(ordata)) t.Log(string(decrypt)) } ``` 此处大家留意下我用base64把加密出来的密文再编码了一遍,是因为加密出来有可能无法显示