返回顶部
首页 > 资讯 > 精选 >Go语言如何使用对称加密
  • 483
分享到

Go语言如何使用对称加密

2023-06-30 20:06:36 483人浏览 泡泡鱼
摘要

这篇文章主要介绍了Go语言如何使用对称加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言如何使用对称加密文章都会有所收获,下面我们一起来看看吧。介绍在项目开发中,我们经常会遇到需要使用对称密钥加密的场景

这篇文章主要介绍了Go语言如何使用对称加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言如何使用对称加密文章都会有所收获,下面我们一起来看看吧。

介绍

项目开发中,我们经常会遇到需要使用对称密钥加密的场景,比如客户端调用接口时,参数包含手机号、身份证号或银行卡号等。

对称密钥加密是一种加密方式,其中只有一个密钥用于加密和解密数据。通过对称加密进行通信的实体必须共享该密钥,以便可以在解密过程中使用它。这种加密方法与非对称加密不同,非对称加密使用一对密钥(一个公钥和一个私钥)来加密和解密数据。

AES 算法

常见的对称密钥加密算法有 AES (Advanced Encryption Standard),DES (Data Encryption Standard) 等,它们都属于分组密码。

因为基于目前计算机的处理能力,可以很快破解 DES 算法,所以 DES 目前已经很少被使用。

AES 是目前最常用的对称密钥加密算法,最初称为 Rijndael。AES 密码每个分组大小是 128 bits,但是它具有三种密钥长度,分别是 AES-128、AES-192 和 AES-256。需要注意的是,在 golang 标准库提供的接口中,仅支持 AES-128(16 byte),实际上 AES-128 的加密强度已经足够安全

本文我们主要介绍 Golang 中怎么使用 AES 算法的对称密钥加密。

实践

AES 算法的分组模式包含 ECB、CBC、CFB、OFB 和 CTR,其中 ECB 和 CBC 使用比较多,虽然 ECB 比 CBC 简单,效率高,但是它的密文有规律,比较容易破解,所以,更推荐大家使用 CBC,本文我们主要介绍使用最多的 CBC 分组模式。

需要注意的是,ECB 和 CBC 分组模式的最后一个分组,需要填充满 16 byte,关于填充模式,限于篇幅,本文不展开介绍,但会提供填充数据和取消填充数据的代码。

Golang 实现 AES 对称加密算法主要分为以下几个步骤:

加密步骤:

  • 创建一个新的加密块。

  • 获取加密块的大小。

  • 填充数据。

  • 初始化向量。

  • 指定加密块的分组模式。

  • 进行加密多个块。

示例代码:

func AESCbcEncrypt(secreTKEy, src string) string { key := []byte(secretKey) if len(key) > 16 {  key = key[:16] } plaintext := []byte(src) block, err := aes.NewCipher(key) if err != nil {  panic(err) } blockSize := block.BlockSize() plaintext = Padding(plaintext, blockSize) if len(plaintext)%aes.BlockSize != 0 {  panic("plaintext is not a multiple of the block size") } ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil {  panic(err) } mode := cipher.NewCBCEncrypter(block, iv) mode.CryptBlocks(ciphertext[aes.BlockSize:], plaintext) return base64.StdEncoding.EncodeToString(ciphertext)}

解密步骤:

  • 创建一个新的加密块。

  • 初始化向量。

  • 指定解密块的分组模式。

  • 进行解密多个块。

  • 取消填充数据。

示例代码:

func AESCbcDecrypt(secretKey, src string) string { key := []byte(secretKey) ciphertext, _ := base64.StdEncoding.DecodeString(src) block, err := aes.NewCipher(key) if err != nil {  panic(err) } if len(ciphertext) < aes.BlockSize {  panic("ciphertext too short") } iv := ciphertext[:aes.BlockSize] ciphertext = ciphertext[aes.BlockSize:] if len(ciphertext)%aes.BlockSize != 0 {  panic("ciphertext is not a multiple of the block size") } mode := cipher.NewCBCDecrypter(block, iv) mode.CryptBlocks(ciphertext, ciphertext) ciphertext = UnPadding(ciphertext) return string(ciphertext)}

填充示例代码:

func Padding(plainText []byte, blockSize int) []byte { padding := blockSize - len(plainText)%blockSize char := []byte{byte(padding)} newPlain := bytes.Repeat(char, padding) return append(plainText, newPlain...)}

取消填充示例代码:

func UnPadding(plainText []byte) []byte { length := len(plainText) lastChar := plainText[length-1] padding := int(lastChar) return plainText[:length-padding]}

需要注意的是,初始化向量(IV)是随机的,细心的读者朋友们可能已经发现,使用随机 IV ,同一份明文,每次加密得到的密文也都不同。但是,加密和解密使用的 IV 必须相同。

关于“Go语言如何使用对称加密”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Go语言如何使用对称加密”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Go语言如何使用对称加密

本文链接: https://lsjlt.com/news/331231.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Go语言如何使用对称加密
    这篇文章主要介绍了Go语言如何使用对称加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言如何使用对称加密文章都会有所收获,下面我们一起来看看吧。介绍在项目开发中,我们经常会遇到需要使用对称密钥加密的场景...
    99+
    2023-06-30
  • Go语言使用对称加密的示例详解
    目录介绍AES 算法实践总结介绍 在项目开发中,我们经常会遇到需要使用对称密钥加密的场景,比如客户端调用接口时,参数包含手机号、身份证号或银行卡号等。 对称密钥加密是一种加密方...
    99+
    2022-06-07
    加密 GO 示例 go语言
  • https使用对称加密还是非对称加密
    这篇文章主要介绍了https使用对称加密还是非对称加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇https使用对称加密还是非对称加密文章都会有所收获,下面我们一起来看看吧。HTTPS协议是由SSL/TLS+...
    99+
    2023-06-27
  • Go语言 如何实现RSA加密解密
    RSA是一种非对称加密算法,它的名字是由它的三位开发者,即RonRivest、AdiShamir和LeonardAdleman 的姓氏的首字母组成的(Rivest-Shamir-Ad...
    99+
    2024-04-02
  • PHP中如何进行对称和非对称加密?
    在网络安全领域,加密技术是一种非常重要的技术手段,其可以将数据进行加密和解密,从而确保数据的安全性。PHP作为一种流行的服务器端编程语言,也提供了对称和非对称加密的支持,以满足不同应用场景的需求。对称加密对称加密是指使用相同的密钥进行加密与...
    99+
    2023-05-21
    加密算法 对称加密 非对称加密
  • 如何使用 Go 语言的 load 接口加载对象?
    Go 语言是一种受到广泛欢迎的编程语言,它具有高效、简洁、安全等诸多优点。其中,load 接口是 Go 语言中非常重要的一个接口,它可以帮助我们在程序运行时动态地加载对象。本文将详细介绍如何使用 Go 语言的 load 接口加载对象,并提供...
    99+
    2023-08-19
    load 接口 对象
  • Go语言如何实现Sm2加解密
    这篇文章主要讲解了“Go语言如何实现Sm2加解密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言如何实现Sm2加解密”吧!在 Go 语言中,可以使用 github.com/tjfoc/...
    99+
    2023-07-05
  • 如何使用Java实现RSA非对称加密算法
    这篇文章主要介绍如何使用Java实现RSA非对称加密算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、非对称加密非对称加密算法是一种密钥的保密方法。非对称加密算法需要两个密钥:公开密钥(publickey:简称公...
    99+
    2023-06-15
  • Golang如何实现AES对称加密
    小编给大家分享一下Golang如何实现AES对称加密,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AES加密AES对称加密简介AES是一个对称密码,旨在取代DES...
    99+
    2023-06-15
  • Thinkphp 6 使用RSA非对称加密算法 对接口加密解密
    后台接口中 经常使用到加密算法 如何使用RSA 非对称加密 对数据进行加密传输 下载RSA 加密算法 php-Rsa算法下载 将下载好的RSA 算法 放入 到 TP6项目根目录下 exten...
    99+
    2023-09-17
    php 算法
  • 如何使用Go语言加载容器?
    Go语言是一种流行的编程语言,它具有高效、可靠和易于使用的特点。在容器化的世界中,Go语言也是非常流行的一种语言。在本文中,我们将探讨如何使用Go语言加载容器。 Docker是目前最流行的容器化工具之一。在Go语言中,有一个名为"dock...
    99+
    2023-09-18
    关键字 load 容器
  • PHP怎么使用OpenSSL加密中的非对称加密
    这篇文章主要介绍了PHP怎么使用OpenSSL加密中的非对称加密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP的OpenSSL加密扩展学习:非对称加密生成私钥通过之前的...
    99+
    2023-06-15
  • 如何使用go语言求绝对值
    今天小编给大家分享的是如何使用go语言求绝对值,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。在go语言中,可以利用math包中的abs()函数来求绝对值,语法格式“math.Abs(...
    99+
    2023-06-15
  • Go语言中如何使用NumPy对象?
    NumPy是一个用于数值计算的Python库,它提供了高效的多维数组对象和各种派生对象(如掩码数组和矩阵),并且包含了大量的数学函数库,可以方便地完成各种数值计算任务。虽然NumPy是一个Python库,但是我们也可以在Go语言中使用Nu...
    99+
    2023-08-28
    numpy 对象 教程
  • 如何使用Go语言加载Laravel日志?
    Go语言是一种快速、稳定、安全的编程语言,而Laravel则是一种流行的PHP框架。使用Go语言加载Laravel日志可以实现更好的日志记录和管理。在本文中,我们将介绍如何使用Go语言加载Laravel日志,并提供一些演示代码。 首先,我们...
    99+
    2023-10-18
    load laravel 日志
  • 如何使用Go语言加载Shell缓存?
    Go语言是一种开源的编程语言,它具有高效、简洁、安全等特点,因此备受开发者的青睐。在Shell缓存的处理中,使用Go语言可以使操作更加便捷,本文将为您详细介绍如何使用Go语言加载Shell缓存。 一、什么是Shell缓存? Shell缓存是...
    99+
    2023-08-19
    load shell 缓存
  • 如何使用 Go 语言处理 HTTP 对象?
    Go 语言是一门快速、简单、高效的编程语言,它在处理 HTTP 对象方面非常出色。在本文中,我们将深入探讨如何使用 Go 语言处理 HTTP 对象,让你能够更好地掌握 Go 语言的网络编程能力。 一、HTTP 对象概述 在开始讲解如何使用 ...
    99+
    2023-07-03
    大数据 http 对象
  • Vue中使用crypto-jsAES对称加密算法实现加密解密
    目录 下载crypto-js加密解密数据AES算法的ECB模式加密-设置秘钥AES算法的CBC模式加密-设置秘钥和偏移量参考: 在数字加密算法中,通过可划分为对称...
    99+
    2024-04-02
  • 如何使用Go语言编写高效的对象加载代码?
    Go语言是一门快速的编程语言,它在处理数据时非常高效。对于数据处理密集型应用程序,Go语言是一个理想的选择。在Go语言中,对象的加载是一项重要的任务,因为它直接关系到程序的性能。在本文中,我们将介绍如何使用Go语言编写高效的对象加载代码。 ...
    99+
    2023-10-09
    load 对象 开发技术
  • Go 语言中的 load 接口:如何使用它来加载对象?
    在 Go 语言中,load 接口是一个非常重要的接口。它允许开发者以一种简单且可扩展的方式加载对象,包括字节码、配置文件、静态资源等等。在本文中,我们将探讨 load 接口的工作原理,并演示如何使用它来加载对象。 load 接口的定义 l...
    99+
    2023-08-19
    load 接口 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作