package cipher

import “crypto/cipher”

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

参见http://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.html和NIST Special Publication 800-38A。

Index 返回首页

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) Examples

返回首页

NewCBCDecrypter NewCBCEncrypter NewCFBDecrypter NewCFBEncrypter NewCTR NewOFB StreamReader StreamWriter type Block type Block interface { // 返回加密字节块的大小 BlockSize() int // 加密src的第一块数据并写入dst,src和dst可指向同一内存地址 Encrypt(dst, src []byte) // 解密src的第一块数据并写入dst,src和dst可指向同一内存地址 Decrypt(dst, src []byte) } Block接口代表一个使用特定密钥的底层块加/解密器。它提供了加密和解密独立数据块的能力。

type BlockMode type BlockMode interface { // 返回加密字节块的大小 BlockSize() int // 加密或解密连续的数据块,src的尺寸必须是块大小的整数倍,src和dst可指向同一内存地址 CryptBlocks(dst, src []byte) } BlockMode接口代表一个工作在块模式(如CBC、ECB等)的加/解密器。

func NewCBCEncrypter

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

Example func NewCBCDecrypter

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

Example type Stream type Stream interface { // 从加密器的key流和src中依次取出字节二者xor后写入dst,src和dst可指向同一内存地址 XORKeyStream(dst, src []byte) } Stream接口代表一个流模式的加/解密器。

func NewCFBEncrypter

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

Example func NewCFBDecrypter

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

Example func NewOFB

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

Example func NewCTR

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

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

Example func (StreamReader) Read

func (r StreamReader) Read(dst []byte) (n int, err error) type StreamWriter type StreamWriter struct { S Stream W io.Writer Err error // unused } 将一个Stream与一个io.Writer接口关联起来,Write方法会调用XORKeyStream方法来处理提供的所有切片。如果Write方法返回的n小于提供的切片的长度,则表示StreamWriter不同步,必须丢弃。StreamWriter没有内建的缓存,不需要调用Close方法去清空缓存。

Example func (StreamWriter) Write

func (w StreamWriter) Write(src []byte) (n int, err error) func (StreamWriter) Close

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

type AEAD 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

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