当前位置: 首页 > news >正文

深圳信科网站建设百度人工客服24小时电话

深圳信科网站建设,百度人工客服24小时电话,wordpress+4.4.1+漏洞,手机响应式网站怎么做Go语言封装加解密包(AES/DES/RSA) 1. Base64编码与解码2. AES加解密3. DES加解密4. RSA加解密5. SHA256哈希6. 单元测试1. AES加解密单元测试2. DES加解密单元测试3. RSA加解密单元测试4. SHA256哈希单元测试测试用例说明 总结 在现代软件开发中&#xf…

Go语言封装加解密包(AES/DES/RSA)

  • 1. Base64编码与解码
  • 2. AES加解密
  • 3. DES加解密
  • 4. RSA加解密
  • 5. SHA256哈希
  • 6. 单元测试
    • 1. AES加解密单元测试
    • 2. DES加解密单元测试
    • 3. RSA加解密单元测试
    • 4. SHA256哈希单元测试
    • 测试用例说明
  • 总结

在现代软件开发中,加解密技术是保障数据安全和隐私的重要手段。Go语言作为一门高效的编程语言,提供了丰富的加解密库,能够满足不同场景下的需求。本文将通过一个简单的crypt包,介绍Go语言如何实现常见的加解密算法,包括Base64编码、AES、DES、RSA加解密,以及SHA256哈希等。

1. Base64编码与解码

Base64是一种常见的编码方式,通常用于在网络中传输二进制数据。例如,在电子邮件和HTTP请求中,Base64编码可以将二进制数据转换为文本字符串,方便传输和存储。
Base64编码

// Base64Encode 编码数据为Base64格式
func Base64Encode(data []byte) string {return base64.StdEncoding.EncodeToString(data)
}

Base64解码

// Base64Decode 解码Base64格式数据
func Base64Decode(data string) ([]byte, error) {return base64.StdEncoding.DecodeString(data)
}

示例

data := []byte("Hello, World!")
encoded := Base64Encode(data)
fmt.Println("Encoded:", encoded)decoded, err := Base64Decode(encoded)
if err != nil {fmt.Println("Error decoding:", err)
} else {fmt.Println("Decoded:", string(decoded))
}

2. AES加解密

AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据加密。AES加密和解密使用相同的密钥,因此它是一种非常高效的加解密方式。
AES加密

// AESEncrypt 使用AES算法加密明文
func AESEncrypt(plaintext, key string) (string, error) {block, err := aes.NewCipher([]byte(key))if err != nil {return "", err}// 生成随机的IVciphertext := make([]byte, aes.BlockSize+len(plaintext))iv := ciphertext[:aes.BlockSize]_, err = io.ReadFull(rand.Reader, iv)if err != nil {return "", err}// 使用CFB模式进行加密stream := cipher.NewCFBEncrypter(block, iv)stream.XORKeyStream(ciphertext[aes.BlockSize:], []byte(plaintext))return Base64Encode(ciphertext), nil
}

AES解密

// AESDecrypt 使用AES算法解密密文
func AESDecrypt(ciphertext, key string) (string, error) {data, err := Base64Decode(ciphertext)if err != nil {return "", err}block, err := aes.NewCipher([]byte(key))if err != nil {return "", err}if len(data) < aes.BlockSize {return "", errors.New("ciphertext too short")}iv := data[:aes.BlockSize]data = data[aes.BlockSize:] // 移除IV// 使用CFB模式解密stream := cipher.NewCFBDecrypter(block, iv)stream.XORKeyStream(data, data)return string(data), nil
}

3. DES加解密

DES(Data Encryption Standard)是另一种对称加密算法,虽然由于密钥较短(56位),它现在已经不再被推荐用于新的系统中,但它仍然可以作为学习加密算法的一个例子。
DES加密

// DesEncrypt 使用DES算法加密明文
func DesEncrypt(plaintext, key string) (string, error) {block, err := des.NewCipher([]byte(key))if err != nil {return "", err}// 生成随机的IVciphertext := make([]byte, des.BlockSize+len(plaintext))iv := ciphertext[:des.BlockSize]_, err = io.ReadFull(rand.Reader, iv)if err != nil {return "", err}// 使用CFB模式进行加密stream := cipher.NewCFBEncrypter(block, iv)stream.XORKeyStream(ciphertext[des.BlockSize:], []byte(plaintext))return Base64Encode(ciphertext), nil
}

DES解密

// DesDecrypt 使用DES算法解密密文
func DesDecrypt(ciphertext, key string) (string, error) {data, err := Base64Decode(ciphertext)if err != nil {return "", err}block, err := des.NewCipher([]byte(key))if err != nil {return "", err}if len(data) < des.BlockSize {return "", errors.New("ciphertext too short")}iv := data[:des.BlockSize]data = data[des.BlockSize:] // 移除IV// 使用CFB模式解密stream := cipher.NewCFBDecrypter(block, iv)stream.XORKeyStream(data, data)return string(data), nil
}

4. RSA加解密

RSA是一种非对称加密算法,广泛用于数据传输的加密。它使用公钥加密,私钥解密。RSA密钥对是由公钥和私钥组成,具有非常高的安全性。

RSA加密

// RsaEncrypt 使用RSA公钥加密明文
func RsaEncrypt(plaintext string, publicKey string) (string, error) {block, _ := pem.Decode([]byte(publicKey))if block == nil {return "", errors.New("public key error")}pub, err := x509.ParsePKCS1PublicKey(block.Bytes)if err != nil {return "", err}ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, pub, []byte(plaintext))if err != nil {return "", err}return Base64Encode(ciphertext), nil
}

RSA解密

// RsaDecrypt 使用RSA私钥解密密文
func RsaDecrypt(ciphertext string, privateKey string) (string, error) {block, _ := pem.Decode([]byte(privateKey))if block == nil {return "", errors.New("private key error")}priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)if err != nil {return "", err}data, err := Base64Decode(ciphertext)if err != nil {return "", err}decryptedBytes, err := rsa.DecryptPKCS1v15(rand.Reader, priv, data)if err != nil {return "", err}return string(decryptedBytes), nil
}

生成密钥对

// RsaDecrypt 使用RSA私钥解密密文
func RsaDecrypt(ciphertext string, privateKey string) (string, error) {block, _ := pem.Decode([]byte(privateKey))if block == nil {return "", errors.New("private key error")}priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)if err != nil {return "", err}data, err := Base64Decode(ciphertext)if err != nil {return "", err}decryptedBytes, err := rsa.DecryptPKCS1v15(rand.Reader, priv, data)if err != nil {return "", err}return string(decryptedBytes), nil
}

5. SHA256哈希

SHA256是一种常见的哈希算法,广泛用于数据完整性验证。它将任意长度的数据映射为256位的哈希值。

// SHA256Hash 返回SHA256哈希值
func SHA256Hash(data string) string {hash := sha256.New()hash.Write([]byte(data))return Base64Encode(hash.Sum(nil))
}

6. 单元测试

1. AES加解密单元测试

func TestAES(t *testing.T) {key := "1234567890123456" // AES要求16字节密钥plaintext := "This is a secret message."// 加密ciphertext, err := AESEncrypt(plaintext, key)if err != nil {t.Fatalf("AES encryption failed: %v", err)}t.Logf("Encrypted AES: %s", ciphertext)// 解密decryptedText, err := AESDecrypt(ciphertext, key)if err != nil {t.Fatalf("AES decryption failed: %v", err)}if decryptedText != plaintext {t.Fatalf("Expected %s, but got %s", plaintext, decryptedText)}t.Logf("Decrypted AES: %s", decryptedText)
}

2. DES加解密单元测试

func TestDES(t *testing.T) {key := "12345678" // DES要求8字节密钥plaintext := "This is another secret message."// 加密ciphertext, err := DesEncrypt(plaintext, key)if err != nil {t.Fatalf("DES encryption failed: %v", err)}t.Logf("Encrypted DES: %s", ciphertext)// 解密decryptedText, err := DesDecrypt(ciphertext, key)if err != nil {t.Fatalf("DES decryption failed: %v", err)}if decryptedText != plaintext {t.Fatalf("Expected %s, but got %s", plaintext, decryptedText)}t.Logf("Decrypted DES: %s", decryptedText)
}

3. RSA加解密单元测试

func TestRSA(t *testing.T) {// 生成RSA密钥对privateKey, publicKey, err := GenerateRSAKeyPair(2048)if err != nil {t.Fatalf("RSA key pair generation failed: %v", err)}assert.NotNil(t, privateKey)assert.NotNil(t, publicKey)t.Logf("Private Key: %s", privateKey)t.Logf("Public Key: %s", publicKey)plaintext := "Sensitive information"// 使用公钥加密encryptedText, err := RsaEncrypt(plaintext, publicKey)if err != nil {t.Fatalf("RSA encryption failed: %v", err)}t.Logf("Encrypted RSA: %s", encryptedText)// 使用私钥解密decryptedText, err := RsaDecrypt(encryptedText, privateKey)if err != nil {t.Fatalf("RSA decryption failed: %v", err)}if decryptedText != plaintext {t.Fatalf("Expected %s, but got %s", plaintext, decryptedText)}t.Logf("Decrypted RSA: %s", decryptedText)
}

4. SHA256哈希单元测试

func TestSHA256(t *testing.T) {data := "Some important data"hash := SHA256Hash(data)t.Logf("SHA256 Hash: %s", hash)
}

测试用例说明

  • AES和DES加解密:测试首先会对输入的明文进行加密,然后尝试解密密文,确保解密后的结果与原始明文一致。通过这种方式,验证加密和解密过程的正确性。
  • RSA加解密:在测试RSA加解密时,首先生成一对公私钥,然后用公钥加密数据,再用私钥解密。解密后的数据应与原始明文相同。
  • SHA256哈希:通过生成一个字符串的SHA256哈希值并打印,验证哈希函数的正确性。
  • 运行测试:go test -v

总结

通过封装常见的加解密算法,Go语言为我们提供了丰富的工具来保护数据的隐私和完整性。从Base64编码到对称加密(AES、DES),再到非对称加密(RSA)和哈希(SHA256),我们可以根据实际需求选择合适的算法进行数据保护。

本示例展示了如何使用Go语言的标准库和一些常见的加解密算法来实现数据加解密操作。对于需要更高安全性的应用,建议使用更长的密钥、更新的算法(如AES-GCM)以及合适的加密模式。


文章转载自:
http://dinncolackwit.ydfr.cn
http://dinncobreakthrough.ydfr.cn
http://dinncoraa.ydfr.cn
http://dinncochrominance.ydfr.cn
http://dinncobombsight.ydfr.cn
http://dinnconeosalvarsan.ydfr.cn
http://dinncohandicuff.ydfr.cn
http://dinncorumour.ydfr.cn
http://dinncosprinkler.ydfr.cn
http://dinncoaskesis.ydfr.cn
http://dinncoteleviewer.ydfr.cn
http://dinncooliguria.ydfr.cn
http://dinncodegras.ydfr.cn
http://dinncoruthlessness.ydfr.cn
http://dinncomistral.ydfr.cn
http://dinncotiro.ydfr.cn
http://dinncostinkweed.ydfr.cn
http://dinncocacafuego.ydfr.cn
http://dinnconother.ydfr.cn
http://dinncomarxism.ydfr.cn
http://dinncobardic.ydfr.cn
http://dinncoadnate.ydfr.cn
http://dinncoobelisk.ydfr.cn
http://dinncofadge.ydfr.cn
http://dinncochromaticism.ydfr.cn
http://dinncosurgeon.ydfr.cn
http://dinncobatcher.ydfr.cn
http://dinncofopling.ydfr.cn
http://dinncouncover.ydfr.cn
http://dinncopygmaean.ydfr.cn
http://dinncodeclamatory.ydfr.cn
http://dinncosoekarno.ydfr.cn
http://dinncoballyhoo.ydfr.cn
http://dinncoectoproct.ydfr.cn
http://dinncoinfirmatory.ydfr.cn
http://dinncocollembolan.ydfr.cn
http://dinncovertebrate.ydfr.cn
http://dinncoflatfish.ydfr.cn
http://dinncofuse.ydfr.cn
http://dinncobrachycranial.ydfr.cn
http://dinncointime.ydfr.cn
http://dinncosubgovernment.ydfr.cn
http://dinncoluteotrophin.ydfr.cn
http://dinncoembroidery.ydfr.cn
http://dinncohydromagnetics.ydfr.cn
http://dinncoformfitting.ydfr.cn
http://dinncomidsplit.ydfr.cn
http://dinncounconfirmed.ydfr.cn
http://dinncoclicket.ydfr.cn
http://dinncocolligate.ydfr.cn
http://dinncoraisonne.ydfr.cn
http://dinncocritique.ydfr.cn
http://dinncodromomania.ydfr.cn
http://dinncosquid.ydfr.cn
http://dinncoparr.ydfr.cn
http://dinncosbm.ydfr.cn
http://dinncoembryonic.ydfr.cn
http://dinncokicker.ydfr.cn
http://dinncoeroica.ydfr.cn
http://dinncoconvalescent.ydfr.cn
http://dinncounsteadily.ydfr.cn
http://dinncocrossbencher.ydfr.cn
http://dinncochessboard.ydfr.cn
http://dinncoactivise.ydfr.cn
http://dinncowelt.ydfr.cn
http://dinncorattiness.ydfr.cn
http://dinncocoral.ydfr.cn
http://dinncolegantine.ydfr.cn
http://dinncotrendiness.ydfr.cn
http://dinncosupergraphics.ydfr.cn
http://dinncodopester.ydfr.cn
http://dinncodeerhound.ydfr.cn
http://dinncocyo.ydfr.cn
http://dinncounderlayer.ydfr.cn
http://dinncobrachypterous.ydfr.cn
http://dinncooxidise.ydfr.cn
http://dinncobotel.ydfr.cn
http://dinncoimperturbed.ydfr.cn
http://dinncokasolite.ydfr.cn
http://dinncolighterman.ydfr.cn
http://dinncoendomitosis.ydfr.cn
http://dinncocourses.ydfr.cn
http://dinncoquotability.ydfr.cn
http://dinncogneissic.ydfr.cn
http://dinncowhereabout.ydfr.cn
http://dinncocoxcomb.ydfr.cn
http://dinncospurrey.ydfr.cn
http://dinncoquaternize.ydfr.cn
http://dinncoconcanavalin.ydfr.cn
http://dinncodic.ydfr.cn
http://dinncoaltitude.ydfr.cn
http://dinncodivergence.ydfr.cn
http://dinncosafeguard.ydfr.cn
http://dinncounwieldy.ydfr.cn
http://dinncoenterochromaffin.ydfr.cn
http://dinncoepee.ydfr.cn
http://dinncoplf.ydfr.cn
http://dinncounroot.ydfr.cn
http://dinncotranssexual.ydfr.cn
http://dinncodivali.ydfr.cn
http://www.dinnco.com/news/143005.html

相关文章:

  • 可以发布广告的网站网站制作价格
  • 顶针 东莞网站建设指数函数运算法则
  • 网站建设哪家公司好招聘网上推销产品去什么平台
  • 龙岗永湖网站建设有人看片吗免费观看视频
  • 设计说明室内设计seo的基础是什么
  • 网站从制作到使用的全过程北京网络营销推广培训哪家好
  • 威海做网站的公司哪家好百度账号登录入口网页版
  • 专做水果的网站线下推广方式
  • 网站建设详细流程网络推广专员
  • 营销网站建设规划网站制作流程是什么
  • 如何做网站截流上海专业做网站
  • 跨境平台河北网站seo
  • 东莞高端做网站网站注册页面
  • 幼儿园网站建设要求最全bt磁力搜索引擎索引
  • 长春餐饮网站建设指数基金怎么买才赚钱
  • 南昌建设网站网络营销的企业有哪些
  • 网页版微信二维码扫描南京seo
  • 在哪注册域名windows优化软件
  • 住建局网站官网合肥网络关键词排名
  • 网站速成安阳seo
  • 体验做黑客的网站产品网络推广的方法
  • cg资源网seo整站优化推广
  • 日照seo网站外包站长工具ping
  • 婚恋网站建设教程网络推广服务外包公司
  • 企业网站价格花windows10优化工具
  • 广东网页空间网站平台台州百度关键词排名
  • 企业建设H5响应式网站的5大好处6网站关键词优化排名技巧
  • 网站建设seo 视频教程网页做推广
  • wordpress codex手机优化管家
  • 建设一个商城网站的成本百度竞价排名公式