Golang加密库Go-dongle发布0.2.0版本:增强编解码与加解密功能

Golang加密库Go-dongle发布0.2.0版本:增强编解码与加解密功能 Dongle 是一个简单、语义化且对开发者友好的 Go 语言包,用于编码解码和加密解密。

Dongle 已被收录至 awesome-go,如果您觉得它有帮助,请给我一个星标。

github.com/golang-module/dongle

安装

go get -u github.com/golang-module/dongle

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

更新日志

  • encode 重命名为 encoder
  • decode 重命名为 decoder
  • encrypt 重命名为 encrypter,并添加 ToRawString()ToRawBytes() 方法
  • decrypt 重命名为 decrypter,并添加 FromRawString()FromRawBytes() 方法
  • sign 重命名为 signer,并添加 ToRawString() 和 ToRawBytes() 方法
  • verify 重命名为 verifier,并添加 FromRawString()FromRawBytes()ToBool() 方法
  • 添加对 sha3-224sha3-256sha3-384sha3-512 的加密支持
  • 添加对 hmac-sha3-224hmac-sha3-256hmac-sha3-384hmac-sha3-512 的加密支持
  • 添加对 sha512sha512-224sha512-256 的加密支持
  • 添加对 hmac-sha512hmac-sha512-224hmac-sha512-256 的加密支持
  • 添加对 rsa 签名和签名验证的支持
  • base58.gobase62.gobase91.gobase100.go 移至子包
  • 摩斯电码编码解码支持指定分隔符,默认为 /
  • 统一单元测试格式

功能列表

  • [x] 通过 Hex 进行编码和解码
  • [x] 通过 Base16 进行编码和解码
  • [x] 通过 Base32 进行编码和解码
  • [x] 通过 Base58 进行编码和解码
  • [x] 通过 Base62 进行编码和解码
  • [x] 通过 Base64 进行编码和解码
  • [x] 通过 Base64URL 进行编码和解码
  • [x] 通过 SafeURL 进行编码和解码
  • [x] 通过 Base85 进行编码和解码
  • [x] 通过 Base91 进行编码和解码
  • [x] 通过 Base100 进行编码和解码
  • [x] 通过 Morse 进行编码和解码
  • [x] 通过 Md4 进行加密
  • [x] 通过 Md5 进行加密
  • [x] 通过 Sha1 进行加密
  • [x] 通过 Sha3-224 进行加密
  • [x] 通过 Sha3-256 进行加密
  • [x] 通过 Sha3-384 进行加密
  • [x] 通过 Sha3-512 进行加密
  • [x] 通过 Sha224 进行加密
  • [x] 通过 Sha256 进行加密
  • [x] 通过 Sha384 进行加密
  • [x] 通过 Sha512 进行加密
  • [x] 通过 Sha512-224 进行加密
  • [x] 通过 Sha512-256 进行加密
  • [x] 通过 Ripemd160 进行加密
  • [x] 通过 Hmac-md4 进行加密
  • [x] 通过 Hmac-md5 进行加密
  • [x] 通过 Hmac-sha1 进行加密
  • [x] 通过 Hmac-sha3-224 进行加密
  • [x] 通过 Hmac-sha3-256 进行加密
  • [x] 通过 Hmac-sha3-384 进行加密
  • [x] 通过 Hmac-sha3-512 进行加密
  • [x] 通过 Hmac-sha224 进行加密
  • [x] 通过 Hmac-sha256 进行加密
  • [x] 通过 Hmac-sha384 进行加密
  • [x] 通过 Hmac-sha512 进行加密
  • [x] 通过 Hmac-sha512-224 进行加密
  • [x] 通过 Hmac-sha512-256 进行加密
  • [x] 通过 Hmac-ripemd160 进行加密
  • [x] 通过 Hmac-sm3 进行加密
  • [ ] 通过 Rc2 进行加密和解密
  • [x] 通过 Rc4 进行加密和解密
  • [ ] 通过 Rc5 进行加密和解密
  • [ ] 通过 Rc6 进行加密和解密
  • [x] 通过 Tea 进行加密和解密
  • [ ] 通过 Xtea 进行加密和解密
  • [x] 通过 Aes 进行加密和解密
  • [x] 通过 Des 进行加密和解密
  • [x] 通过 3Des 进行加密和解密
  • [x] 通过 Rsa 进行加密和解密
  • [ ] 通过 Ecc 进行加密和解密
  • [ ] 通过 Sm2 进行加密和解密
  • [x] 通过 Sm3 进行加密
  • [ ] 通过 Sm4 进行加密和解密
  • [ ] 通过 Sm7 进行加密和解密
  • [ ] 通过 Sm9 进行加密和解密
  • [x] 通过 Bcrypt 进行签名和验证
  • [x] 通过 Rsa 进行签名和验证
  • [ ] 通过 Dsa 进行签名和验证

更多关于Golang加密库Go-dongle发布0.2.0版本:增强编解码与加解密功能的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang加密库Go-dongle发布0.2.0版本:增强编解码与加解密功能的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go-dongle 0.2.0版本的更新确实带来了更清晰的API设计和更丰富的功能。重命名后的方法(如encrypterdecrypter)使语义更明确,新增的ToRawString()FromRawBytes()等方法提供了更灵活的原始数据处理能力。SHA-3和SHA-512系列的加入扩展了哈希算法覆盖范围,RSA签名支持也增强了实用性。

以下是几个典型使用示例:

1. 编码解码示例(Base64与Hex):

package main

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

func main() {
    // Base64编码解码
    encoded := dongle.Encoder.FromString("hello").ByBase64().ToString()
    fmt.Println(encoded) // aGVsbG8=
    
    decoded := dongle.Decoder.FromString(encoded).ByBase64().ToString()
    fmt.Println(decoded) // hello

    // Hex编码
    hexEncoded := dongle.Encoder.FromString("dongle").ByHex().ToString()
    fmt.Println(hexEncoded) // 646f6e676c65
}

2. 哈希加密示例(SHA3-256与HMAC):

func hashExample() {
    // SHA3-256哈希
    hash := dongle.Encrypter.FromString("hello world").BySha3(dongle.SHA3_256).ToHexString()
    fmt.Println(hash) // 644bcc7e564373040999aac89e7622f3ca71fba1d972fd94a31c3bfbf24e3938

    // HMAC-SHA3-256
    key := "secret"
    hmac := dongle.Encrypter.FromString("data").ByHmacSha3(dongle.SHA3_256, key).ToHexString()
    fmt.Println(hmac)
}

3. 对称加密示例(AES):

func aesExample() {
    key := "1234567890123456"
    iv := "1234567890123456"
    
    // AES-CBC加密
    encrypted := dongle.Encrypter.FromString("hello world").
        ByAes(dongle.CBC, dongle.PKCS7, []byte(key), []byte(iv)).
        ToRawBytes()
    
    // AES-CBC解密
    decrypted := dongle.Decrypter.FromRawBytes(encrypted).
        ByAes(dongle.CBC, dongle.PKCS7, []byte(key), []byte(iv)).
        ToString()
    
    fmt.Println(string(decrypted)) // hello world
}

4. RSA签名验证示例:

func rsaExample() {
    // 生成RSA密钥对
    privateKey := `-----BEGIN RSA PRIVATE KEY-----...`
    publicKey := `-----BEGIN PUBLIC KEY-----...`
    
    data := "message to sign"
    
    // RSA签名
    signature := dongle.Signer.FromString(data).
        ByRsa(dongle.SHA256, privateKey).
        ToRawBytes()
    
    // RSA验签
    isValid := dongle.Verifier.FromRawBytes(signature).
        ByRsa(dongle.SHA256, publicKey, data).
        ToBool()
    
    fmt.Println(isValid) // true
}

5. 摩斯电码自定义分隔符:

func morseExample() {
    // 默认分隔符/
    morse := dongle.Encoder.FromString("SOS").ByMorse().ToString()
    fmt.Println(morse) // .../---/...
    
    // 自定义分隔符
    morse2 := dongle.Encoder.FromString("HELLO").ByMorse().SetSeparator("|").ToString()
    fmt.Println(morse2) // ....|.|.-..|.-..|---
}

新增的ToRawString()FromRawBytes()方法在处理二进制数据时特别有用:

func rawExample() {
    // 加密后获取原始字节
    rawBytes := dongle.Encrypter.FromString("sensitive data").
        ByDes(dongle.ECB, dongle.PKCS7, []byte("8bytekey")).
        ToRawBytes()
    
    // 从原始字节解密
    result := dongle.Decrypter.FromRawBytes(rawBytes).
        ByDes(dongle.ECB, dongle.PKCS7, []byte("8bytekey")).
        ToString()
}

将base58、base62等编码移至子包后,使用方式保持不变但结构更清晰。这个版本在保持API简洁性的同时显著增强了功能完整性,特别是密码学原语的覆盖范围。

回到顶部