首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
图文并茂VLAN详解,让你看一遍就理解VLAN
2
做了几年的网工也未必了解VLAN和VXLAN的区别,今天我来告诉你!
3
全网内容最全,质量最高的MPLS及MPLS VPN技术详解,瑞哥力荐!
4
Google BBR拥塞控制算法背后的数学解释 | 深度
5
QUIC 0-RTT实现简析及一种分布式的0-RTT实现方案
6
AGPS定位基本原理浅析
7
Golang语言情怀-第56期 Go 语言标准库翻译 crypto/cipher
8
神锁离线版插件端到端加密比HTTPS更安全
9
基于 TLS 1.3的微信安全通信协议 mmtls 介绍(上)
10
基于 TLS 1.3的微信安全通信协议 mmtls 介绍(下)
11
24位腾讯云专家精彩演讲,4万字《腾讯云技术实践精选集 2021》发布!(附合集下载)
12
浅谈VPC二三,秒懂秒透
13
提速 30%!腾讯TQUIC 网络传输协议
14
25 张图,一万字,拆解 Linux 网络包发送过程
15
nginx http模块数据存储结构
16
多机房多活,多机房平滑迁移架构方案全集(上+中+下)
17
小孩都看得懂的多臂老虎机和汤姆森采样
18
什么是 Go runtime.KeepAlive?
19
Rust 热点| Discord 为什么从 Go 切换到了 Rust
20
用户态 tcpdump 如何实现抓到内核网络包的?
21
一文读懂 | coredump文件是如何生成的
22
网工知识大扫盲——三层交换技术
23
聊聊 top 命令中的 CPU 使用率
24
什么是HDFS的纠删码
25
Linux ptrace 的实现
26
天天讲路由,那 Linux 路由到底咋实现的!?
27
Linux系统研究 - 操作系统是如何管理tcp连接的 (2)
28
一个有关tcp的非常有意思的问题
29
对上一篇文章中tcp问题的进一步思考
30
epoll和shutdown使用不当可能导致死循环
31
socket的SO_REUSEADDR参数全面分析
32
多进程可以监听同一端口吗
33
golang | 是返回struct还是返回struct的指针
34
​TCP 拥塞控制详解
35
C|网络|TCP-BBR拥塞控制剖析
36
如何使用 Go 语言写游戏服务器?
37
Nginx 日志 worker_connections are not enough while connecting to upstream
38
如何用九条命令在一分钟内检查Linux服务器性能?
39
服务器病了吗? Linux 服务器的那些性能参数指标
40
边缘计算比云计算强在哪里?终于有人讲明白了
41
详解边缘计算系统逻辑架构:云、边、端协同
42
边缘计算成为下一个爆发点,云计算巨头和CDN巨头谁会赢?
43
告知你不为人知的 UDP:连接性和负载均衡
44
为什么需要智能网卡?
45
从CDN到边缘计算,近水楼台是否先得月?
46
经典网络还是VPC,开发者作何选择?
47
Linux内核网络udp数据包发送(二)——UDP协议层分析
48
有没有人告诉你—写时拷贝的真相
49
[linux][network]net bridge技术分析
50
软硬件融合技术内幕 进阶篇 (1) —— 从小霸王到云计算

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

import "crypto/cipher"

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

代码语言:javascript
复制
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
复制
NewCBCDecrypter
NewCBCEncrypter
NewCFBDecrypter
NewCFBEncrypter
NewCTR
NewOFB
StreamReader
StreamWriter

type Block

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

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

func NewCBCEncrypter

代码语言:javascript
复制
func NewCBCEncrypter(b Block, iv []byte) BlockMode

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

func NewCBCDecrypter

代码语言:javascript
复制
func NewCBCDecrypter(b Block, iv []byte) BlockMode

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

type Stream

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

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

func NewCFBEncrypter

代码语言:javascript
复制
func NewCFBEncrypter(block Block, iv []byte) Stream

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

func NewCFBDecrypter

代码语言:javascript
复制
func NewCFBDecrypter(block Block, iv []byte) Stream

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

func NewOFB

代码语言:javascript
复制
func NewOFB(b Block, iv []byte) Stream

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

func NewCTR

代码语言:javascript
复制
func NewCTR(block Block, iv []byte) Stream

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

type StreamReader

代码语言:javascript
复制
type StreamReader struct {
    S   Stream
    R   io.Reader
}

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

func (StreamReader) Read

代码语言:javascript
复制
func (r StreamReader) Read(dst []byte) (n int, err error)

type StreamWriter

代码语言:javascript
复制
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
复制
func (w StreamWriter) Write(src []byte) (n int, err error)

func (StreamWriter) Close

代码语言:javascript
复制
func (w StreamWriter) Close() error

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

type AEAD

代码语言:javascript
复制
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
复制
func NewGCM(cipher Block) (AEAD, error)

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


参考资料:

Go语言中文文档

http://www.golang.ltd/

Go语言官方文档

https://golang.google.cn/

下一篇
举报
领券