全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

Golang中的加密与解密实践

来源:千锋教育
发布人:xqq
2023-12-27

推荐

在线提问>>

Golang中的加密与解密实践

随着互联网的不断发展,越来越多的信息需要传输,而这些信息中很多都是敏感信息,为了保证信息安全,加密技术就被广泛应用。在Golang中,我们可以通过各种加密算法来保证信息安全,同时也可以通过相应的解密算法来还原加密后的信息。本文将介绍一些常见的加密与解密算法,并提供相应的代码示例。

一、MD5加密算法

MD5是一种哈希算法,它将任意长度的二进制值映射为一个128位的小写字母和数字组成的字符串。MD5算法具有抗碰撞特性,即不同的输入得到的哈希值很难相同。在Golang中,我们可以通过crypto/md5包来实现MD5加密算法。

示例代码:

`go

import (

"crypto/md5"

"encoding/hex"

"fmt"

)

// 对字符串进行MD5加密

func Md5Encrypt(str string) string {

md5Ctx := md5.New()

md5Ctx.Write(byte(str))

cipherStr := md5Ctx.Sum(nil)

return hex.EncodeToString(cipherStr)

}

func main() {

str := "hello world"

encryptedStr := Md5Encrypt(str)

fmt.Println("加密前:", str)

fmt.Println("加密后:", encryptedStr)

}

二、AES加密算法AES是一种对称加密算法,它是目前最流行的加密算法之一,具有高效、安全、可靠等特点。在Golang中,我们可以通过crypto/aes包来实现AES加密算法。示例代码:`goimport (    "bytes"    "crypto/aes"    "crypto/cipher"    "encoding/base64"    "fmt") // 对字符串进行AES加密func AesEncrypt(str, key string) (string, error) {    strBytes := byte(str)    keyBytes := byte(key)     block, err := aes.NewCipher(keyBytes)    if err != nil {        return "", err    }     blockSize := block.BlockSize()    strBytes = PKCS5Padding(strBytes, blockSize)     iv := keyBytes     blockMode := cipher.NewCBCEncrypter(block, iv)    cipherText := make(byte, len(strBytes))    blockMode.CryptBlocks(cipherText, strBytes)     return base64.StdEncoding.EncodeToString(cipherText), nil} // 对字符串进行AES解密func AesDecrypt(str, key string) (string, error) {    strBytes, err := base64.StdEncoding.DecodeString(str)    if err != nil {        return "", err    }    keyBytes := byte(key)     block, err := aes.NewCipher(keyBytes)    if err != nil {        return "", err    }     blockSize := block.BlockSize()     iv := keyBytes     blockMode := cipher.NewCBCDecrypter(block, iv)    origData := make(byte, len(strBytes))     blockMode.CryptBlocks(origData, strBytes)    origData = PKCS5UnPadding(origData)     return string(origData), nil} // PKCS5填充func PKCS5Padding(cipherText byte, blockSize int) byte {    padding := blockSize - len(cipherText)%blockSize    padText := bytes.Repeat(byte{byte(padding)}, padding)    return append(cipherText, padText...)} // PKCS5去除填充func PKCS5UnPadding(origData byte) byte {    length := len(origData)    unPadding := int(origData)    return origData} func main() {    str := "hello world"    key := "1234567890123456"     encryptedStr, err := AesEncrypt(str, key)    if err != nil {        fmt.Println("加密失败:", err)        return    }     decryptedStr, err := AesDecrypt(encryptedStr, key)    if err != nil {        fmt.Println("解密失败:", err)        return    }     fmt.Println("加密前:", str)    fmt.Println("加密后:", encryptedStr)    fmt.Println("解密后:", decryptedStr)}

三、RSA加密算法

RSA是一种非对称加密算法,它通过公钥加密、私钥解密的方式实现信息的安全传输。在Golang中,我们可以通过crypto/rsa包来实现RSA加密算法。

示例代码:

`go

import (

"crypto/rand"

"crypto/rsa"

"crypto/x509"

"encoding/base64"

"encoding/pem"

"fmt"

)

// 生成RSA密钥对

func GenerateRsaKeyPair() (*rsa.PrivateKey, error) {

privateKey, err := rsa.GenerateKey(rand.Reader, 2048)

if err != nil {

return nil, err

}

return privateKey, nil

}

// 使用公钥进行RSA加密

func RsaEncrypt(plainText byte, publicKey byte) (byte, error) {

block, _ := pem.Decode(publicKey)

if block == nil {

return nil, fmt.Errorf("public key error")

}

pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)

if err != nil {

return nil, err

}

pub := pubInterface.(*rsa.PublicKey)

cipherText, err := rsa.EncryptPKCS1v15(rand.Reader, pub, plainText)

if err != nil {

return nil, err

}

return cipherText, nil

}

// 使用私钥进行RSA解密

func RsaDecrypt(cipherText byte, privateKey byte) (byte, error) {

block, _ := pem.Decode(privateKey)

if block == nil {

return nil, fmt.Errorf("private key error")

}

priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)

if err != nil {

return nil, err

}

plainText, err := rsa.DecryptPKCS1v15(rand.Reader, priv, cipherText)

if err != nil {

return nil, err

}

return plainText, nil

}

func main() {

str := "hello world"

privateKey, err := GenerateRsaKeyPair()

if err != nil {

fmt.Println("生成密钥对失败:", err)

return

}

publicKey := &privateKey.PublicKey

cipherText, err := RsaEncrypt(byte(str), byte(publicKey))

if err != nil {

fmt.Println("加密失败:", err)

return

}

plainText, err := RsaDecrypt(cipherText, byte(privateKey))

if err != nil {

fmt.Println("解密失败:", err)

return

}

fmt.Println("加密前:", str)

fmt.Println("加密后:", base64.StdEncoding.EncodeToString(cipherText))

fmt.Println("解密后:", string(plainText))

}

四、总结

本文介绍了Golang中常见的加密与解密算法,包括MD5、AES、RSA等。这些加密算法在实际开发中非常常见,开发者需要在保证信息安全的前提下,选择合适的加密算法来保护数据的安全。同时,本文提供了相应的代码示例,读者可以根据需要进行调整和使用。

相关文章

Golang高速并发编程(二)

7个提升golang性能的技巧

Golang中的加密与解密实践

GoLand实现高效的代码完成

如何使用Docker进行部署?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取