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-224、sha3-256、sha3-384、sha3-512的加密支持 - 添加对
hmac-sha3-224、hmac-sha3-256、hmac-sha3-384、hmac-sha3-512的加密支持 - 添加对
sha512、sha512-224、sha512-256的加密支持 - 添加对
hmac-sha512、hmac-sha512-224、hmac-sha512-256的加密支持 - 添加对
rsa签名和签名验证的支持 - 将
base58.go、base62.go、base91.go、base100.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
更多关于Golang加密库Go-dongle发布0.2.0版本:增强编解码与加解密功能的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go-dongle 0.2.0版本的更新确实带来了更清晰的API设计和更丰富的功能。重命名后的方法(如encrypter、decrypter)使语义更明确,新增的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简洁性的同时显著增强了功能完整性,特别是密码学原语的覆盖范围。

