加密解密
大约 4 分钟componenthashaesdesrsa
概述
gocrypto
是一个集成 单向加密
、对称加解密
、非对称加解密
的组件,包括 hash、aes、des、rsa。
Hash 单向加密
点击查看示例代码
import "github.com/go-dev-frame/sponge/pkg/gocrypto"
var hashRawData = []byte("hash_abcdefghijklmnopqrstuvwxyz0123456789")
// 独立的哈希函数
gocrypto.Md5(hashRawData)
gocrypto.Sha1(hashRawData)
gocrypto.Sha256(hashRawData)
gocrypto.Sha512(hashRawData)
// 哈希集合,根据哈希类型
// 指定执行相应的哈希函数
gocrypto.Hash(crypto.MD5, hashRawData)
gocrypto.Hash(crypto.SHA3_224, hashRawData)
gocrypto.Hash(crypto.SHA256, hashRawData)
gocrypto.Hash(crypto.SHA3_224, hashRawData)
gocrypto.Hash(crypto.BLAKE2s_256, hashRawData)
带盐的密码哈希和校验
用户注册的密码经过哈希处理后存储在数据库中,登录时将输入的密码与存储的哈希值进行比较,以判断密码是否正确,从而确保只有用户自己知道密码的明文。
点击查看示例代码
import "github.com/go-dev-frame/sponge/pkg/gocrypto"
pwd := "123"
// 哈希
hashStr, err := gocrypto.HashAndSaltPassword(pwd)
if err != nil {
return err
}
// 校验密码
ok := gocrypto.VerifyPassword(pwd, hashStr)
if !ok {
return errors.New("passwords mismatch")
}
AES 加密和解密
AES(Advanced Encryption Standard
)即高级加密标准,设计用来取代 DES
,有四种分组加密模式:ECB、CBC、CFB、CTR。
有四个函数 AesEncrypt
、AesDecrypt
、AesEncryptHex
、AesDecryptHex
。
点击查看示例代码
import "github.com/go-dev-frame/sponge/pkg/gocrypto"
var (
aesRawData = []byte("aes_abcdefghijklmnopqrstuvwxyz0123456789")
aesKey = []byte("aesKey0123456789aesKey0123456789")
)
// AesEncrypt 和 AesDecrypt 的参数有默认值:
// 默认模式是 ECB,可以修改为 CBC、CTR、CFB
// 默认密钥长度是 16,可以修改为 24、32
// 默认模式是 ECB,默认密钥长度是 16
cypherData, _ := gocrypto.AesEncrypt(aesRawData) // 加密
raw, _ := gocrypto.AesDecrypt(cypherData) // 解密,返回原文
// 模式是 ECB,密钥长度是 32
cypherData, _ := gocrypto.AesEncrypt(aesRawData, gocrypto.WithAesKey(aesKey)) // 加密
raw, _ := gocrypto.AesDecrypt(cypherData, gocrypto.WithAesKey(aesKey)) // 解密
// 模式是 CTR,默认密钥长度是 16
cypherData, _ := gocrypto.AesEncrypt(aesRawData, gocrypto.WithAesModeCTR()) // 加密
raw, _ := gocrypto.AesDecrypt(cypherData, gocrypto.WithAesModeCTR()) // 解密
// 模式是 CBC,密钥长度是 32
cypherData, _ := gocrypto.AesEncrypt(aesRawData, gocrypto.WithAesModeECB(), gocrypto.WithAesKey(aesKey)) // 加密
raw, _ := gocrypto.AesDecrypt(cypherData, gocrypto.WithAesModeECB(), gocrypto.WithAesKey(aesKey)) // 解密
// AesEncryptHex 和 AesDecryptHex 函数,这两个函数的密文经过 hex 转码,
// 使用方法与 AesEncrypt 和 AesDecrypt 完全相同。
DES 加密和解密
DES(Data Encryption Standard
)即数据加密标准,是目前最流行的加密算法之一,有四种分组加密模式:ECB、CBC、CFB、CTR。
有四个函数 DesEncrypt
、DesDecrypt
、DesEncryptHex
、DesDecryptHex
。
点击查看示例代码
import "github.com/go-dev-frame/sponge/pkg/gocrypto"
var (
desRawData = []byte("des_abcdefghijklmnopqrstuvwxyz0123456789")
desKey = []byte("desKey0123456789desKey0123456789")
)
// PKCS#1
var publicKey = []byte(`
-----BEGIN PUBLIC KEY-----
xxxxxx
-----END PUBLIC KEY-----
`)
var privateKey = []byte(`
-----BEGIN RSA PRIVATE KEY-----
xxxxxx
-----END RSA PRIVATE KEY-----
`)
// DesEncrypt 和 DesDecrypt 的参数有默认值:
// 默认模式是 ECB,可以修改为 CBC、CTR、CFB
// 默认密钥长度是 16,可以修改为 24、32
// 默认模式是 ECB,默认密钥长度是 16
cypherData, _ := gocrypto.DesEncrypt(desRawData) // 加密
raw, _ := gocrypto.DesDecrypt(cypherData) // 解密
// 模式是 ECB,密钥长度是 32
cypherData, _ := gocrypto.DesEncrypt(desRawData, gocrypto.WithDesKey(desKey)) // 加密
raw, _ := gocrypto.DesDecrypt(cypherData, gocrypto.WithDesKey(desKey)) // 解密
// 模式是 CTR,默认密钥长度是 16
cypherData, _ := gocrypto.DesEncrypt(desRawData, gocrypto.WithDesModeCTR()) // 加密
raw, _ := gocrypto.DesDecrypt(cypherData, gocrypto.WithDesModeCTR()) // 解密
// 模式是 CBC,密钥长度是 32
cypherData, _ := gocrypto.DesEncrypt(desRawData, gocrypto.WithDesModeECB(), gocrypto.WithDesKey(desKey)) // 加密
raw, _ := gocrypto.DesDecrypt(cypherData, gocrypto.WithDesModeECB(), gocrypto.WithDesKey(desKey)) // 解密
// DesEncryptHex 和 DesDecryptHex 函数,这两个函数的密文经过 hex 转码,
// 使用方法与 DesEncrypt 和 DesDecrypt 完全相同。
RSA 非对称加密和解密
RSA 加密和解密
公钥用于加密,私钥用于解密。例如,某人使用公钥加密信息并发送给你,你拥有私钥才能解密信息内容。
有四个函数:RsaEncrypt
、RsaDecrypt
、RsaEncryptHex
、RsaDecryptHex
。
点击查看示例代码
import "github.com/go-dev-frame/sponge/pkg/gocrypto"
var rsaRawData = []byte("rsa_abcdefghijklmnopqrstuvwxyz0123456789")
// PKCS#1
var publicKey = []byte(`
-----BEGIN PUBLIC KEY-----
xxxxxx
-----END PUBLIC KEY-----
`)
var privateKey = []byte(`
-----BEGIN RSA PRIVATE KEY-----
xxxxxx
-----END RSA PRIVATE KEY-----
`)
// RsaEncrypt 和 RsaDecrypt 的参数有默认值:
// 默认密钥对格式:PKCS#1,可以修改为 PKCS#8
// 默认密钥对格式是 PKCS#1
cypherData, _ := gocrypto.RsaEncrypt(publicKey, rsaRawData) // 加密
raw, _ := gocrypto.RsaDecrypt(privateKey, cypherData) // 解密
// 密钥对格式是 PKCS#8
cypherData, _ := gocrypto.RsaEncrypt(publicKey, rsaRawData, gocrypto.WithRsaFormatPKCS8()) // 加密
raw, _ := gocrypto.RsaDecrypt(privateKey, cypherData, gocrypto.WithRsaFormatPKCS8()) // 解密
// RsaEncryptHex 和 RsaDecryptHex 函数,这两个函数的密文经过 hex 转码,
// 使用方法与 RsaEncrypt 和 RsaDecrypt 完全相同。
RSA 签名和验签
私钥用于签名,公钥用于验证签名。例如,你用私钥对你的身份进行签名,其他人则通过公钥来验证你的身份是否可信。
有四个函数:RsaSign
、RsaVerify
、RsaSignBase64
、RsaVerifyBase64
。
点击查看示例代码
import "github.com/go-dev-frame/sponge/pkg/gocrypto"
var rsaRawData = []byte("rsa_abcdefghijklmnopqrstuvwxyz0123456789")
// RsaSign 和 RsaVerify 的参数有默认值:
// 默认密钥对格式是 PKCS#1,可以修改为 PKCS#8
// 默认哈希是 sha1,可以修改为 sha256、sha512
// 默认密钥对格式是 PKCS#1,默认哈希是 sha1
signData, _ := gocrypto.RsaSign(privateKey, rsaRawData) // 签名
err := gocrypto.RsaVerify(publicKey, rsaRawData, signData) // 验签
// 默认密钥对格式是 PKCS#1,哈希是 sha256
signData, _ := gocrypto.RsaSign(privateKey, rsaRawData, gocrypto.WithRsaHashTypeSha256()) // 签名
err := gocrypto.RsaVerify(publicKey, rsaRawData, signData, gocrypto.WithRsaHashTypeSha256()) // 验签
// 密钥对格式是 PKCS#8,默认哈希是 sha1
signData, _ := gocrypto.RsaSign(privateKey, rsaRawData, gocrypto.WithRsaFormatPKCS8()) // 签名
err := gocrypto.RsaVerify(publicKey, rsaRawData, signData, gocrypto.WithRsaFormatPKCS8()) // 验签
// 密钥对格式是 PKCS#8,哈希是 sha512
signData, _ := gocrypto.RsaSign(privateKey, rsaRawData, gocrypto.WithRsaFormatPKCS8(), gocrypto.WithRsaHashTypeSha512()) // 签名
err := gocrypto.RsaVerify(publicKey, rsaRawData, signData, gocrypto.WithRsaFormatPKCS8(), gocrypto.WithRsaHashTypeSha512()) // 验签
// RsaSignBase64 和 RsaVerifyBase64 的密文经过 base64 转码,
// 使用方法与 RsaSign 和 RsaVerify 完全相同。