Golang编码解码与加解密包Go-dongle v1.1.2发布

Golang编码解码与加解密包Go-dongle v1.1.2发布 Dongle 是一个简单、语义化且对开发者友好的 Golang 加密包,拥有 100% 的单元测试覆盖率,已被收录于 awesome-go

Feature

  • 全面的编码算法支持:支持 Base32/Base45/Base58/Base62/Base64/Base85/Base91/Base100/Hex/Morse 等多种编码格式。
  • 强大的哈希算法支持:支持 MD2/MD4/MD5、SHA1/SHA2/SHA3、RIPEMD160 等多种哈希算法以及 HMAC 消息认证。
  • 完整的加密算法支持:支持 RC4、AES、DES、3DES、Blowfish 等对称加密算法以及 RSA 等非对称加密算法。
  • 可靠的数字签名支持:提供数字签名生成与验证,支持 PKCS1/PKCS8 密钥格式,确保数据完整性和身份认证。
  • 高效的流式处理:支持大文件的流式编码/解码和加密/解密,可增量处理数据而无需等待完整数据,内存占用低。
  • 全面的测试覆盖:100% 单元测试覆盖率,对所有加密、解密、哈希、HMAC 和编码/解码模块进行了广泛测试,覆盖所有边界情况和异常场景。
  • 安全可靠的设计:提供输入验证、错误处理、内存安全等安全特性,支持密钥管理和统一的错误消息。
  • 详细的错误处理:提供全面的错误信息和类型,支持错误链追踪,便于调试和问题解决。

Change log

  • [refactor] 编码/解码支持通过 coding.BufferSize 全局变量自定义文件流缓冲区大小。

    coding.BufferSize = 1024 * 1024 // 1MB
    
  • [refactor] 加密/解密支持通过 crypto.BufferSize 全局变量自定义文件流缓冲区大小。

    crypto.BufferSize = 1024 * 1024 // 1MB
    
  • [refactor] 哈希/Hmac 算法支持通过 hash.BufferSize 全局变量自定义文件流缓冲区大小。

    hash.BufferSize = 1024 * 1024 // 1MB
    
  • [feat] 新增 Blake2b 哈希算法支持,包括 blake2b-256blake2b-384blake2b-512

    import "github.com/golang-module/dongle/blake2b"
    
    // 计算 Blake2b-256 哈希值
    hash := blake2b.FromString("hello world").By256().ToHexString()
    // 计算 Blake2b-384 哈希值
    hash := blake2b.FromString("hello world").By384().ToHexString()
    // 计算 Blake2b-512 哈希值
    hash := blake2b.FromString("hello world").By512().ToHexString()
    
  • [feat] 新增 Blake2s 哈希算法支持,包括 blake2s-128blake2s-256

    import "github.com/golang-module/dongle/blake2s"
    
    // 计算 Blake2s-128 哈希值
    hash := blake2s.FromString("hello world").By128().ToHexString()
    // 计算 Blake2s-256 哈希值
    hash := blake2s.FromString("hello world").By256().ToHexString()
    
  • [feat] 新增 ChaCha20 加密算法支持。

    import "github.com/golang-module/dongle/chacha20"
    
    // 加密
    ciphertext := chacha20.Encrypt.FromString("hello world").By("key", "nonce").ToRawString()
    // 解密
    plaintext := chacha20.Decrypt.FromRawString(ciphertext).By("key", "nonce").ToString()
    
  • [feat] 新增 ChaCha20Poly1305 加密算法支持。

    import "github.com/golang-module/dongle/chacha20poly1305"
    
    // 加密
    ciphertext := chacha20poly1305.Encrypt.FromString("hello world").By("key", "nonce").ToRawString()
    // 解密
    plaintext := chacha20poly1305.Decrypt.FromRawString(ciphertext).By("key", "nonce").ToString()
    

更多关于Golang编码解码与加解密包Go-dongle v1.1.2发布的实战教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

donglev1.1.0 版本以来已经过重构。欢迎任何指正和建议。谢谢。

更多关于Golang编码解码与加解密包Go-dongle v1.1.2发布的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


其中绝大部分是对 Go 标准库算法的封装,只有一小部分,例如 morsesm2,是 Go 标准库不支持的,因此独立实现。

尤其是在加密方面——这些仅仅是Go算法的封装,还是算法的新实现?

如何对这些包进行审计,以验证它们抵抗不同密码攻击或可能实现缺陷的能力?

Go-dongle v1.1.2 的发布带来了几个实用的新特性,特别是新增的 Blake2b、Blake2s 哈希算法以及 ChaCha20 和 ChaCha20Poly1305 加密算法的支持,这对于需要现代加密和哈希方案的项目来说很有价值。流式处理缓冲区大小的全局自定义也是一个重要的改进,它允许开发者根据应用场景(如处理大文件)优化内存使用和性能。

以下是一些具体的使用示例,展示了新版本中的部分功能:

1. 使用 Blake2b 哈希算法:

package main

import (
    "fmt"
    "github.com/golang-module/dongle/blake2b"
)

func main() {
    data := "hello world"
    
    // 计算 Blake2b-256 哈希
    hash256 := blake2b.FromString(data).By256().ToHexString()
    fmt.Printf("Blake2b-256: %s\n", hash256)
    
    // 计算 Blake2b-512 哈希
    hash512 := blake2b.FromString(data).By512().ToHexString()
    fmt.Printf("Blake2b-512: %s\n", hash512)
}

2. 使用 ChaCha20 加密和解密:

package main

import (
    "fmt"
    "github.com/golang-module/dongle/chacha20"
)

func main() {
    plaintext := "sensitive data"
    key := "32byte-long-key-1234567890123456"
    nonce := "12byte-nonce"
    
    // 加密
    ciphertext := chacha20.Encrypt.FromString(plaintext).By(key, nonce).ToRawString()
    fmt.Printf("Ciphertext: %x\n", ciphertext)
    
    // 解密
    decrypted := chacha20.Decrypt.FromRawString(ciphertext).By(key, nonce).ToString()
    fmt.Printf("Decrypted: %s\n", decrypted)
}

3. 自定义流式处理的缓冲区大小:

package main

import (
    "github.com/golang-module/dongle/coding"
    "github.com/golang-module/dongle/crypto"
    "github.com/golang-module/dongle/hash"
)

func init() {
    // 设置全局缓冲区大小为 2MB,适用于大文件处理
    coding.BufferSize = 2 * 1024 * 1024
    crypto.BufferSize = 2 * 1024 * 1024
    hash.BufferSize = 2 * 1024 * 1024
}

func main() {
    // 后续的编码、加密或哈希操作将使用新的缓冲区大小
}

4. 使用 ChaCha20Poly1305 进行认证加密:

package main

import (
    "fmt"
    "github.com/golang-module/dongle/chacha20poly1305"
)

func main() {
    message := "confidential message"
    key := "32byte-long-key-1234567890123456"
    nonce := "12byte-nonce12"
    
    // 加密(自动包含认证标签)
    encrypted := chacha20poly1305.Encrypt.FromString(message).By(key, nonce).ToRawString()
    fmt.Printf("Encrypted: %x\n", encrypted)
    
    // 解密并验证完整性
    decrypted, err := chacha20poly1305.Decrypt.FromRawString(encrypted).By(key, nonce).ToString()
    if err != nil {
        fmt.Printf("Decryption failed: %v\n", err)
        return
    }
    fmt.Printf("Decrypted: %s\n", decrypted)
}

这些示例展示了如何利用 v1.1.2 的新增功能。Go-dongle 的 API 设计保持了语义化的特点,使得加密和编码操作直观易用。新增的算法和缓冲区自定义选项进一步扩展了其适用场景,特别是在需要处理大文件或使用现代加密标准的项目中。

回到顶部