https://github.com/houseme/gocrypto
A general solution for commonly used crypt in golang
https://github.com/houseme/gocrypto
aes base64 crypto cryptography decryption des des3 encryption go golang hash hex rsa
Last synced: 3 months ago
JSON representation
A general solution for commonly used crypt in golang
- Host: GitHub
- URL: https://github.com/houseme/gocrypto
- Owner: houseme
- License: apache-2.0
- Created: 2021-08-10T07:10:31.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-03-14T15:07:22.000Z (over 1 year ago)
- Last Synced: 2025-07-06T19:15:25.261Z (3 months ago)
- Topics: aes, base64, crypto, cryptography, decryption, des, des3, encryption, go, golang, hash, hex, rsa
- Language: Go
- Homepage: https://houseme.github.io/gocrypto/
- Size: 97.7 KB
- Stars: 6
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# GoCrypto 使用说明
[](https://pkg.go.dev/github.com/houseme/gocrypto)
[](https://github.com/houseme/gocrypto/actions/workflows/go.yml)
[](https://github.com/houseme/gocrypto)
## 特别说明
based on [GoRSA](https://github.com/farmerx/gorsa), [GoCrypt](https://github.com/yuchenfw/gocrypt) Optimized the following points for
packaging:- Optimization of public and private keys requires registration and initialization in advance.
- The encryption machine does not perform base64 processing, and avoids secondary encapsulation of base64 during
cross-program transfer or storage
- The incoming return uses the string type uniformly to avoid conversion trouble
- Supports RSAWithSHA1 and RSAWithSHA256 signature verification algorithms此版本新增了 AES、DES、3DES、HMAC、HASH 等常见加/解密及 hash 获取方式,结构作了些调整,由之前的版本更新到此版本时一定要注意引用方法包名的变化。AES/DES 块加密时,填充默认采用 PKCS7 padding(
如果块大小为 64 位(8 字节)时,此时 PKCS7 与 PKCS5 结果一致).## get & import
```go
go get -u -v github.com/houseme/gocrypto
```## 使用方法
### 1.构建需要加解密的类型 handle
```go
handleRSA := rsa.NewRSACrypt(secretInfo) // RSA
handleDES := des.NewDESCrypt(key) // des
handle3DES := des.NewTripleDESCrypt(key) // 3des
handleAES := aes.NewAESCrypt(key) // aes
handleHash := hash.NewHash(hashType) // common hash
handleHMAC := hash.NewHMAC(hashType, key) // hmac
```### 2.加密、解密、hash、hmac
#### (1)加密
加密指定字符串,并以指定编码格式输出结果
```go
encrypt, err := handle.Encrypt(src) // des/3des/aes
```#### (2)解密
解密指定格式编码后的加密串,返回原字符串
```go
decrypt, err := handle.Decrypt(src) // des/3des/aes
```#### (3)hash/hmac
哈希运算/密钥相关的哈希运算。
```go
handle.Get([]byte("123456"))// 输出 []byte
handle.EncodeToString([]byte("123456"), gocrypto.HEX) // 输出为 hex 格式的字符串```
## RSA 加密、解密、签名、验签
### 1.设置公私钥信息
```go
secretInfo := rsa.SecretInfo{
PublicKey: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyoiAraTnAbCoqGVOKugFDM2/ms2szXmb3zTOU3ByicH/XPZqy7Eougbs8OQQIoNW4xKw8PNyWf0lfr90qBfPj27INn6N7umVmbHCNCKkQ4frPn46xesw1ywtc2GhOEzZlC8ajlnzBUkj5FJZcrNjXfFmfsQcFQP0g/o/3CAUpk1BXFXt7eZsaYdyn0m7fMoyFt1wlF8egQeGYYE98vtKsvrII51HK8vOEf+5VXU4UZxGfvyzS3A8kuNEkKEh1n9mazjfPBT0KGSiOGh7Nugks+jjfswSgXRK/b2eP3fS7U625rbS798pKxnoS2E0Pgpzdk5fWoNgAlG/n2F9oI2/kQIDAQAB",
PublicKeyDataType: gocrypto.Base64,
PrivateKey: "MIIEowIBAAKCAQEAyoiAraTnAbCoqGVOKugFDM2/ms2szXmb3zTOU3ByicH/XPZqy7Eougbs8OQQIoNW4xKw8PNyWf0lfr90qBfPj27INn6N7umVmbHCNCKkQ4frPn46xesw1ywtc2GhOEzZlC8ajlnzBUkj5FJZcrNjXfFmfsQcFQP0g/o/3CAUpk1BXFXt7eZsaYdyn0m7fMoyFt1wlF8egQeGYYE98vtKsvrII51HK8vOEf+5VXU4UZxGfvyzS3A8kuNEkKEh1n9mazjfPBT0KGSiOGh7Nugks+jjfswSgXRK/b2eP3fS7U625rbS798pKxnoS2E0Pgpzdk5fWoNgAlG/n2F9oI2/kQIDAQABAoIBAF378hqiR0CVhe5+9EMc4BsM7zka8HF5WUe+7W/y4nPivmmZP/29/DQ3OoSekI4zfIJrDgkCL7JqspeaqLvIMN1Sfz4qhBq18mIcBw7CdI+R5yxcz1FAzq1LJtxAFdxWbTFCmoQsYYW2Zx1wyWlcrWPOvc1dm9p0t2b3HeM8T9jLdY+D0Bm9zmAS0nwTuDBxYS77DB9Ncl6pWLLd197/5IoN1/nunFuzpkiwMPI9RF7lgrnUthc/1Gfnylz5/tXCiQsEVSbAdbMXt9nsV0RgVeMcPq/aUqTMLS2lIV8JySWDrRQi4yPHU0hIjcp6ggo53YMuncJZweI/wwkJexojz0ECgYEA5QzRObpU0CryfJ7qa97/USIKHbvl6PuQG9OLyUeP9bG0edidQhUrR4EZwjIl73O8CTJ0bB24wAKZZEOK3eJeqG/N0q+CiD83ygr8pSZzpE1xvqQp32IgXtgvm7/UmT8cfAp05Z3bF4jcA8uXwodBz4NsVGijlO78PsCooLsArM0CgYEA4lz5pXDEN3w5JwkbspLnUSUS738hne8YM0PchCaww+8sXLS9GLL2CHcvwh6Tv9Mee7r6SdbDI73x118y68WEDDhidiYZCLhXJN2v12ezJOMqH5m9wVJzQOGNv6kPV1EW1WlWxoJQGxCdzbZMLxtTbyTZe3+iAVG++8u6NWMV3dUCgYA1dm1rnQto321kGy+6Z/2OMXTNBeufGwDDDfilzZdTkNwASMhEAW7trLuXcV8bahcsymMUTUevQawOFBnYupq/lAEluSOtq5vZBAF+huAdLJptFiJT6rKFkM5j+z2jW3DJnyMz6UmXT7GTDTVqCWoaBqIFfbsY60NjXlK92YhJzQKBgQDWfQjktbSHasLw9RV0oPRklD+cBhfBgfOpZ+0En3CxR+j+MxhW1gSBQwZS5wxTIGXrEeHlo4UmUe5diExE0dRsi+ToVPM1qw6P1SuwbQd3tXSNmu0NyOWCnfblm/j4YNLFB1p9IK9s5dLRQKJxpG/ribw15FuK6n2QM5vOyIPIvQKBgE5PUzRUCCVsjKAxZOfaZQatMbSzAUSB3bNmUw+F3pDq8ibs6XXvtySowG2femlPDNL7mDMuUc9kYrtTFTQNrEsQGB55wBopX3UxzRjpXJoAQ/d+RPdrSJC7xJyu+URoFI6ae0I3bx1BzjctYU0Rv5DUh+j9leMH5N2S9vHb+vqu",
PrivateKeyType: gocrypto.PKCS1,
PrivateKeyDataType: gocrypto.Base64,
HashType: gocrypto.SHA256,
}
handle := rsa.NewRSACrypt(secretInfo)
```### 加密、解密、签名、验签
#### (1)RSA 加密
加密指定字符串,并以指定编码格式输出结果
```go
encrypt, err := handle.Encrypt("test", gocrypto.HEX)
if err != nil {
fmt.Println("encrypt error :", err)
return
}
fmt.Println("encrypt data :", encrypt)
```#### (2)RSA 解密
解密指定格式编码后的加密串,返回原字符串
```go
decrypt, err := handle.Decrypt(encrypt, gocrypto.HEX)
if err != nil {
fmt.Println("decrypt error :", err)
return
}
fmt.Println("decrypt data :", decrypt)
```#### (3)RSA 签名
以指定摘要算法签名,并以指定编码格式输出结果,仅适用于 RSA。
```go
sign, err := handle.Sign("test", gocrypto.HEX)
if err != nil {
fmt.Println("sign error :", err)
return
}
fmt.Println("sign data :", sign)
```#### (4)RSA 验签
验证字符串是否是以指定摘要算法编码的签名串的原始字符串,仅适用于 RSA。
```go
verifySign, err := handle.VerifySign("test", sign, gocrypto.HEX)
if err != nil {
fmt.Println("verifySign error :", err)
return
}
fmt.Println("verifySign result :", verifySign)
```#### (5)RSA 私钥加密
加密指定字符串,并以指定编码格式输出结果
```go
encrypt, err := handle.EncryptByPriKey("test", gocrypto.HEX)
if err != nil {
fmt.Println("encrypt error :", err)
return
}
fmt.Println("encrypt data :", encrypt)
```#### (6)RSA 公钥解密
解密指定格式编码后的加密串,返回原字符串
```go
decrypt, err := handle.DecryptByPublic(encrypt, gocrypto.HEX)
if err != nil {
fmt.Println("decrypt error :", err)
return
}
fmt.Println("decrypt data :", decrypt)
```## License
Licensed under either of Apache License, Version 2.0, [LICENSE](./LICENSE) at your option.