当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


GO StreamWriter用法及代码示例

GO语言"crypto/cipher"包中"StreamWriter"类型的用法及代码示例。

StreamWriter 将 Stream 包装到 io.Writer 中。它调用 XORKeyStream 来处理通过的每个数据片。如果任何 Write 调用返回短,则 StreamWriter 不同步,必须丢弃。 StreamWriter 没有内部缓冲;不需要调用 Close 来刷新写入数据。

用法:

type StreamWriter struct {
    S   Stream
    W   io.Writer
    Err error // unused
}

例子:

package main

import (
    "bytes"
    "crypto/aes"
    "crypto/cipher"
    "encoding/hex"
    "fmt"
    "io"
)

func main() {
    // Load your secret key from a safe place and reuse it across multiple
    // NewCipher calls. (Obviously don't use this example key for anything
    // real.) If you want to convert a passphrase to a key, use a suitable
    // package like bcrypt or scrypt.
    key, _ := hex.DecodeString("6368616e676520746869732070617373")

    bReader := bytes.NewReader([]byte("some secret text"))

    block, err := aes.NewCipher(key)
    if err != nil {
        panic(err)
    }

    // If the key is unique for each ciphertext, then it's ok to use a zero
    // IV.
    var iv [aes.BlockSize]byte
    stream := cipher.NewOFB(block, iv[:])

    var out bytes.Buffer

    writer := &cipher.StreamWriter{S: stream, W: &out}
    // Copy the input to the output buffer, encrypting as we go.
    if _, err := io.Copy(writer, bReader); err != nil {
        panic(err)
    }

    // Note that this example is simplistic in that it omits any
    // authentication of the encrypted data. If you were actually to use
    // StreamReader in this manner, an attacker could flip arbitrary bits in
    // the decrypted result.

    fmt.Printf("%x\n", out.Bytes())
}

输出:

cf0495cc6f75dafc23948538e79904a9

相关用法


注:本文由纯净天空筛选整理自golang.google.cn大神的英文原创作品 StreamWriter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。