Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Golang语言情怀-第56期 Go 语言标准库翻译 crypto/cipher

Golang语言情怀-第56期 Go 语言标准库翻译 crypto/cipher

作者头像
李海彬
发布于 2021-03-09 03:02:37
发布于 2021-03-09 03:02:37
62200
代码可运行
举报
文章被收录于专栏:Golang语言社区Golang语言社区
运行总次数:0
代码可运行

import "crypto/cipher"

cipher包实现了多个标准的用于包装底层块加密算法的加密算法实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Block
type BlockMode
func NewCBCDecrypter(b Block, iv []byte) BlockMode
func NewCBCEncrypter(b Block, iv []byte) BlockMode
type Stream
func NewCFBDecrypter(block Block, iv []byte) Stream
func NewCFBEncrypter(block Block, iv []byte) Stream
func NewCTR(block Block, iv []byte) Stream
func NewOFB(b Block, iv []byte) Stream
type StreamReader
func (r StreamReader) Read(dst []byte) (n int, err error)
type StreamWriter
func (w StreamWriter) Write(src []byte) (n int, err error)
func (w StreamWriter) Close() error
type AEAD
func NewGCM(cipher Block) (AEAD, error)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NewCBCDecrypter
NewCBCEncrypter
NewCFBDecrypter
NewCFBEncrypter
NewCTR
NewOFB
StreamReader
StreamWriter

type Block

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Block interface {
    // 返回加密字节块的大小
    BlockSize() int
    // 加密src的第一块数据并写入dst,src和dst可指向同一内存地址
    Encrypt(dst, src []byte)
    // 解密src的第一块数据并写入dst,src和dst可指向同一内存地址
    Decrypt(dst, src []byte)
}

Block接口代表一个使用特定密钥的底层块加/解密器。它提供了加密和解密独立数据块的能力。

type BlockMode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type BlockMode interface {
    // 返回加密字节块的大小
    BlockSize() int
    // 加密或解密连续的数据块,src的尺寸必须是块大小的整数倍,src和dst可指向同一内存地址
    CryptBlocks(dst, src []byte)
}

BlockMode接口代表一个工作在块模式(如CBC、ECB等)的加/解密器。

func NewCBCEncrypter
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewCBCEncrypter(b Block, iv []byte) BlockMode

返回一个密码分组链接模式的、底层用b加密的BlockMode接口,初始向量iv的长度必须等于b的块尺寸。

func NewCBCDecrypter
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewCBCDecrypter(b Block, iv []byte) BlockMode

返回一个密码分组链接模式的、底层用b解密的BlockMode接口,初始向量iv必须和加密时使用的iv相同。

type Stream

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Stream interface {
    // 从加密器的key流和src中依次取出字节二者xor后写入dst,src和dst可指向同一内存地址
    XORKeyStream(dst, src []byte)
}

Stream接口代表一个流模式的加/解密器。

func NewCFBEncrypter
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewCFBEncrypter(block Block, iv []byte) Stream

返回一个密码反馈模式的、底层用block加密的Stream接口,初始向量iv的长度必须等于block的块尺寸。

func NewCFBDecrypter
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewCFBDecrypter(block Block, iv []byte) Stream

返回一个密码反馈模式的、底层用block解密的Stream接口,初始向量iv必须和加密时使用的iv相同。

func NewOFB
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewOFB(b Block, iv []byte) Stream

返回一个输出反馈模式的、底层采用b生成key流的Stream接口,初始向量iv的长度必须等于b的块尺寸。

func NewCTR
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewCTR(block Block, iv []byte) Stream

返回一个计数器模式的、底层采用block生成key流的Stream接口,初始向量iv的长度必须等于block的块尺寸。

type StreamReader

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type StreamReader struct {
    S   Stream
    R   io.Reader
}

将一个Stream与一个io.Reader接口关联起来,Read方法会调用XORKeyStream方法来处理获取的所有切片。

func (StreamReader) Read
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (r StreamReader) Read(dst []byte) (n int, err error)

type StreamWriter

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type StreamWriter struct {
    S   Stream
    W   io.Writer
    Err error // unused
}

将一个Stream与一个io.Writer接口关联起来,Write方法会调用XORKeyStream方法来处理提供的所有切片。如果Write方法返回的n小于提供的切片的长度,则表示StreamWriter不同步,必须丢弃。StreamWriter没有内建的缓存,不需要调用Close方法去清空缓存。

func (StreamWriter) Write
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (w StreamWriter) Write(src []byte) (n int, err error)
func (StreamWriter) Close
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (w StreamWriter) Close() error

如果w.W字段实现了io.Closer接口,本方法会调用其Close方法并返回该方法的返回值;否则不做操作返回nil。

type AEAD

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type AEAD interface {
    // 返回提供给Seal和Open方法的随机数nonce的字节长度
    NonceSize() int
    // 返回原始文本和加密文本的最大长度差异
    Overhead() int
    // 加密并认证明文,认证附加的data,将结果添加到dst,返回更新后的切片。
    // nonce的长度必须是NonceSize()字节,且对给定的key和时间都是独一无二的。
    // plaintext和dst可以是同一个切片,也可以不同。
    Seal(dst, nonce, plaintext, data []byte) []byte
    // 解密密文并认证,认证附加的data,如果认证成功,将明文添加到dst,返回更新后的切片。
    // nonce的长度必须是NonceSize()字节,nonce和data都必须和加密时使用的相同。
    // ciphertext和dst可以是同一个切片,也可以不同。
    Open(dst, nonce, ciphertext, data []byte) ([]byte, error)
}

AEAD接口是一种提供了使用关联数据进行认证加密的功能的加密模式。

func NewGCM
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewGCM(cipher Block) (AEAD, error)

函数用迦洛瓦计数器模式包装提供的128位Block接口,并返回AEAD接口。


参考资料:

Go语言中文文档

http://www.golang.ltd/

Go语言官方文档

https://golang.google.cn/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Golang语言情怀-第65期 Go 语言标准库翻译 crypto/rc4
Cipher是一个使用特定密钥的RC4实例,本类型实现了cipher.Stream接口。
李海彬
2021/03/09
6200
golang的AES加密和解密的三种模式实现(CBC/ECB/CFB)「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128363.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/31
5.9K0
golang的AES加密和解密的三种模式实现(CBC/ECB/CFB)「建议收藏」
Golang语言情怀-第57期 Go 语言标准库翻译 crypto/des
Package des implements the Data Encryption Standard (DES) and the Triple Data Encryption Algorithm (TDEA) as defined in U.S. Federal Information Processing Standards Publication 46-3.
李海彬
2021/03/09
3220
Golang语言 加密系列之AES
加密代码: func Encrypt(plantText, key []byte) ([]byte, error) { block, err := aes.NewCipher(key) //选择加密算法 if err != nil { return nil, err } plantText = PKCS7Padding(plantText, block.BlockSize()) blockModel := cipher.NewCBCEncrypter(block,
李海彬
2018/03/21
1.1K0
笔记:Go语言中处理字节切片时可能修改传入参数的底层切片序列的问题
笔者在做某项功能特性开发时,需要使用对称加密算法对部分数据做加密,期间将数据以[]byte切片的形式作为入参传入时,发现在加密完成后,原始的明文会发生变化,针对这个问题笔者在 debug 过程中发现是切片与其底层切片变化引起的,于是有了这篇笔记。
bowenerchen
2024/05/24
1732
笔记:Go语言中处理字节切片时可能修改传入参数的底层切片序列的问题
Golang语言情怀-第55期 Go 语言标准库翻译 crypto/aes
创建一个使用给定hash函数的hash.Hash接口,如果该标识值未注册hash函数,将会panic。
李海彬
2021/03/09
2960
Golang语言情怀-第43期 Go 语言标准库翻译 bufio
bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。
李海彬
2021/03/09
5070
Golang语言情怀-第58期 Go 语言标准库翻译 crypto/dsa
dsa包实现FIPS 186-3定义的数字签名算法(Digital Signature Algorithm),即DSA算法。
李海彬
2021/03/09
5350
Golang语言情怀-第62期 Go 语言标准库翻译 crypto/hmac
hmac包实现了U.S. Federal Information Processing Standards Publication 198规定的HMAC(加密哈希信息认证码)。
李海彬
2021/03/09
4760
Golang语言情怀-第44期 Go 语言标准库翻译 builtin
builtin 包为Go的预声明标识符提供了文档。此处列出的条目其实并不在builtin 包中,对它们的描述只是为了让 godoc 给该语言的特殊标识符提供文档。
李海彬
2021/03/09
6230
miniL-web
一个 愉快 的五一假期,总体来说这次minictf就web方向的题目我感觉还是有点难度的,考察范围很广泛,其中两道java相关的也是不知道怎么搞。不过有幸拿到了mini_sql的一血,还是很激动的毕竟第一次在ctf比赛中拿到一血。同时还扩展了一些密码学的东西,比如这个checkin。总之虽然排名并不是很靠前,但学到了很多有用的新姿势,血赚不亏。
pankas
2022/08/10
3470
miniL-web
Golang语言情怀-第47期 Go 语言标准库翻译 compress/flate
flate包实现了deflate压缩数据格式,参见RFC 1951。gzip包和zlib包实现了对基于deflate的文件格式的访问。
李海彬
2021/03/09
5270
【密码学】【Go】详解DES-CBC模式
CBC模式的全称是:Cipher Block Chaining模式(密文分组链接模式)。 在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。
Regan Yue
2021/09/16
1.2K0
【密码学】【Go】详解DES-CBC模式
Golang DES 加解密如何实现?
【导读】本文介绍了 DES 加密原理和作用,和 golang 中 DES 加密解密机制的相应实现。
码农编程进阶笔记
2022/08/18
1.9K0
Golang DES 加解密如何实现?
Golang语言情怀-第64期 Go 语言标准库翻译 crypto/rand
Reader是一个全局、共享的密码用强随机数生成器。在Unix类型系统中,会从/dev/urandom读取;而Windows中会调用CryptGenRandom API。
李海彬
2021/03/09
5310
Golang:加密解密算法
在项目开发过程中,当操作一些用户的隐私信息,诸如密码,帐户密钥等数据时,往往需要加密后可以在网上传输.这时,需要一些高效地,简单易用的加密算法加密数据,然后把加密后的数据存入数据库或进行其他操作;当需要读取数据时,把加密后的数据取出来,再通过算法解密.
OwenZhang
2021/12/08
1.8K0
Golang:加密解密算法
Golang与对称加密
DES(Data Encryption Standard)数据加密标准,是目前最为流行的加密算法之一 DES是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准FIPS,并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来
仙人技术
2021/12/27
1K0
Golang与对称加密
Golang语言情怀-第59期 Go 语言标准库翻译 crypto/ecdsa
使用私钥对任意长度的hash值(必须是较大信息的hash结果)进行签名,返回签名结果(一对大整数)。私钥的安全性取决于密码读取器的熵度(随机程度)。
李海彬
2021/03/09
4770
Go AES加解密
https://blog.csdn.net/K346K346/article/details/89387460
恋喵大鲤鱼
2019/05/05
12.5K0
Golang语言情怀-第45期 Go 语言标准库翻译 bytes
bytes包实现了操作[]byte的常用函数。本包的函数和strings包的函数相当类似。
李海彬
2021/03/09
3880
推荐阅读
相关推荐
Golang语言情怀-第65期 Go 语言标准库翻译 crypto/rc4
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验