Skip to content

Commit 5a00a59

Browse files
committed
继续优化代码,完善使用案例
1 parent 913c35b commit 5a00a59

File tree

10 files changed

+117
-85
lines changed

10 files changed

+117
-85
lines changed

HISTORY.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
## 📜 历史版本的特性介绍 (Features in old versions)
22

3+
### v0.3.1-alpha
4+
5+
> 此版本发布于 2023-06-23
6+
7+
* 继续优化代码,完善使用案例
8+
39
### v0.3.0-alpha
410

511
> 此版本发布于 2023-06-22

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ bench:
1111
go test -v ./_examples/des_test.go -bench=. -benchtime=1s
1212
go test -v ./_examples/triple_des_test.go -bench=. -benchtime=1s
1313
go test -v ./_examples/aes_test.go -bench=. -benchtime=1s
14-
go test -v ./_examples/rsa_test.go -bench=. -benchtime=1s
1514
go test -v ./_examples/rsa_key_test.go -bench=. -benchtime=1s
15+
go test -v ./_examples/rsa_test.go -bench=. -benchtime=1s
1616

1717
all: fmt test bench

README.en.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111

1212
### 💡 Features
1313

14+
* HEX/BASE64 Supports.
15+
* MD5/SHA1/SHA256/SHA512/HMAC Supports.
16+
* CRC/FNV Supports.
1417
* DES/3DES/AES Supports.
1518
* RSA/ECC Supports.
1619
* ECB/CBC/OFB/CFB/CTR Supports.
1720
* PKCS5/PKCS7/ZERO/NO Supports.
18-
* MD5/SHA1/SHA256/SHA512/HMAC Supports.
19-
* CRC/FNV Supports.
20-
* HEX/BASE64 Supports.
2121

2222
_Check [HISTORY.md](./HISTORY.md) and [FUTURE.md](./FUTURE.md) to know about more information._
2323

@@ -27,10 +27,10 @@ _Check [HISTORY.md](./HISTORY.md) and [FUTURE.md](./FUTURE.md) to know about mor
2727
$ go get -u github.com/FishGoddess/cryptox
2828
```
2929

30+
* [hash](_examples/hash.go)
3031
* [des](_examples/des.go)
3132
* [triple_des](_examples/triple_des.go)
3233
* [aes](_examples/aes.go)
33-
* [hash](_examples/hash.go)
3434
* [rsa_key](_examples/rsa_key.go)
3535
* [rsa](_examples/rsa.go)
3636

@@ -47,16 +47,23 @@ goos: darwin
4747
goarch: amd64
4848
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
4949
50-
BenchmarkAESEncryptWithECB-12 2376924 506 ns/op 960 B/op 6 allocs/op
51-
BenchmarkAESEncryptWithCBC-12 1704799 699 ns/op 1072 B/op 9 allocs/op
52-
BenchmarkAESEncryptWithCFB-12 1890339 632 ns/op 816 B/op 8 allocs/op
53-
BenchmarkAESEncryptWithOFB-12 1000000 1029 ns/op 1312 B/op 8 allocs/op
54-
BenchmarkAESEncryptWithCTR-12 979789 1186 ns/op 1312 B/op 8 allocs/op
55-
BenchmarkAESDecryptWithECB-12 2811610 429 ns/op 720 B/op 5 allocs/op
56-
BenchmarkAESDecryptWithCBC-12 2013831 613 ns/op 832 B/op 8 allocs/op
57-
BenchmarkAESDecryptWithCFB-12 1935090 625 ns/op 816 B/op 8 allocs/op
58-
BenchmarkAESDecryptWithOFB-12 1000000 1025 ns/op 1312 B/op 8 allocs/op
59-
BenchmarkAESDecryptWithCTR-12 1000000 1173 ns/op 1312 B/op 8 allocs/op
50+
BenchmarkMD5-12 7447408 156.3 ns/op 112 B/op 2 allocs/op
51+
BenchmarkSHA1-12 6629499 184.2 ns/op 136 B/op 2 allocs/op
52+
BenchmarkSHA224-12 4768708 249.6 ns/op 160 B/op 2 allocs/op
53+
BenchmarkSHA256-12 4755806 256.2 ns/op 160 B/op 2 allocs/op
54+
BenchmarkSHA384-12 3717706 329.8 ns/op 272 B/op 2 allocs/op
55+
BenchmarkSHA512-12 3679125 325.5 ns/op 288 B/op 2 allocs/op
56+
BenchmarkHMAC-12 1215033 988.4 ns/op 512 B/op 6 allocs/op
57+
BenchmarkCRC32IEEE-12 17037747 70.4 ns/op 24 B/op 2 allocs/op
58+
BenchmarkCRC64ISO-12 26904604 44.8 ns/op 8 B/op 1 allocs/op
59+
BenchmarkCRC64ECMA-12 26632101 44.4 ns/op 8 B/op 1 allocs/op
60+
BenchmarkFnv32-12 41738200 28.2 ns/op 8 B/op 1 allocs/op
61+
BenchmarkFnv32a-12 42062208 29.0 ns/op 8 B/op 1 allocs/op
62+
BenchmarkFnv64-12 39065052 29.9 ns/op 8 B/op 1 allocs/op
63+
BenchmarkFnv64a-12 39740802 29.9 ns/op 8 B/op 1 allocs/op
64+
BenchmarkFnv128-12 23474830 50.2 ns/op 16 B/op 1 allocs/op
65+
BenchmarkFnv128a-12 24201123 50.3 ns/op 16 B/op 1 allocs/op
66+
6067
BenchmarkDESEncryptWithECB-12 351558 3444 ns/op 512 B/op 3 allocs/op
6168
BenchmarkDESEncryptWithCBC-12 334164 3668 ns/op 608 B/op 6 allocs/op
6269
BenchmarkDESEncryptWithCFB-12 352360 3566 ns/op 352 B/op 5 allocs/op
@@ -77,23 +84,16 @@ BenchmarkTripleDESDecryptWithCBC-12 117877 9483 ns/op
7784
BenchmarkTripleDESDecryptWithCFB-12 129415 9064 ns/op 608 B/op 5 allocs/op
7885
BenchmarkTripleDESDecryptWithOFB-12 56397 20979 ns/op 1112 B/op 5 allocs/op
7986
BenchmarkTripleDESDecryptWithCTR-12 56103 21694 ns/op 1112 B/op 5 allocs/op
80-
81-
BenchmarkMD5-12 7447408 156.3 ns/op 112 B/op 2 allocs/op
82-
BenchmarkSHA1-12 6629499 184.2 ns/op 136 B/op 2 allocs/op
83-
BenchmarkSHA224-12 4768708 249.6 ns/op 160 B/op 2 allocs/op
84-
BenchmarkSHA256-12 4755806 256.2 ns/op 160 B/op 2 allocs/op
85-
BenchmarkSHA384-12 3717706 329.8 ns/op 272 B/op 2 allocs/op
86-
BenchmarkSHA512-12 3679125 325.5 ns/op 288 B/op 2 allocs/op
87-
BenchmarkHMAC-12 1215033 988.4 ns/op 512 B/op 6 allocs/op
88-
BenchmarkCRC32IEEE-12 17037747 70.4 ns/op 24 B/op 2 allocs/op
89-
BenchmarkCRC64ISO-12 26904604 44.8 ns/op 8 B/op 1 allocs/op
90-
BenchmarkCRC64ECMA-12 26632101 44.4 ns/op 8 B/op 1 allocs/op
91-
BenchmarkFnv32-12 41738200 28.2 ns/op 8 B/op 1 allocs/op
92-
BenchmarkFnv32a-12 42062208 29.0 ns/op 8 B/op 1 allocs/op
93-
BenchmarkFnv64-12 39065052 29.9 ns/op 8 B/op 1 allocs/op
94-
BenchmarkFnv64a-12 39740802 29.9 ns/op 8 B/op 1 allocs/op
95-
BenchmarkFnv128-12 23474830 50.2 ns/op 16 B/op 1 allocs/op
96-
BenchmarkFnv128a-12 24201123 50.3 ns/op 16 B/op 1 allocs/op
87+
BenchmarkAESEncryptWithECB-12 2376924 506 ns/op 960 B/op 6 allocs/op
88+
BenchmarkAESEncryptWithCBC-12 1704799 699 ns/op 1072 B/op 9 allocs/op
89+
BenchmarkAESEncryptWithCFB-12 1890339 632 ns/op 816 B/op 8 allocs/op
90+
BenchmarkAESEncryptWithOFB-12 1000000 1029 ns/op 1312 B/op 8 allocs/op
91+
BenchmarkAESEncryptWithCTR-12 979789 1186 ns/op 1312 B/op 8 allocs/op
92+
BenchmarkAESDecryptWithECB-12 2811610 429 ns/op 720 B/op 5 allocs/op
93+
BenchmarkAESDecryptWithCBC-12 2013831 613 ns/op 832 B/op 8 allocs/op
94+
BenchmarkAESDecryptWithCFB-12 1935090 625 ns/op 816 B/op 8 allocs/op
95+
BenchmarkAESDecryptWithOFB-12 1000000 1025 ns/op 1312 B/op 8 allocs/op
96+
BenchmarkAESDecryptWithCTR-12 1000000 1173 ns/op 1312 B/op 8 allocs/op
9797
9898
BenchmarkRSAEncryptPKCS1v15-12 23575 51665 ns/op 5119 B/op 12 allocs/op
9999
BenchmarkRSAEncryptOAEP-12 23125 54832 ns/op 5475 B/op 18 allocs/op

README.md

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111

1212
### 💡 功能特性
1313

14+
* 支持 HEX/BASE64 等编解码算法。
15+
* 支持 MD5/SHA1/SHA256/SHA512/HMAC 等散列算法。
16+
* 支持 CRC/FNV 等散列算法。
1417
* 支持 DES/3DES/AES 等对称加密算法。
1518
* 支持 RSA/ECC 等非对称加密算法。
1619
* 支持 ECB/CBC/OFB/CFB/CTR 等分组模式。
1720
* 支持 PKCS5/PKCS7/ZERO/NO 等填充方式。
18-
* 支持 MD5/SHA1/SHA256/SHA512/HMAC 等散列算法。
19-
* 支持 CRC/FNV 等散列算法。
20-
* 支持 HEX/BASE64 等编解码算法。
2121

2222
_历史版本的特性请查看 [HISTORY.md](./HISTORY.md)。未来版本的新特性和计划请查看 [FUTURE.md](./FUTURE.md)_
2323

@@ -27,10 +27,10 @@ _历史版本的特性请查看 [HISTORY.md](./HISTORY.md)。未来版本的新
2727
$ go get -u github.com/FishGoddess/cryptox
2828
```
2929

30+
* [hash](_examples/hash.go)
3031
* [des](_examples/des.go)
3132
* [triple_des](_examples/triple_des.go)
3233
* [aes](_examples/aes.go)
33-
* [hash](_examples/hash.go)
3434
* [rsa_key](_examples/rsa_key.go)
3535
* [rsa](_examples/rsa.go)
3636

@@ -47,16 +47,23 @@ goos: darwin
4747
goarch: amd64
4848
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
4949
50-
BenchmarkAESEncryptWithECB-12 2376924 506 ns/op 960 B/op 6 allocs/op
51-
BenchmarkAESEncryptWithCBC-12 1704799 699 ns/op 1072 B/op 9 allocs/op
52-
BenchmarkAESEncryptWithCFB-12 1890339 632 ns/op 816 B/op 8 allocs/op
53-
BenchmarkAESEncryptWithOFB-12 1000000 1029 ns/op 1312 B/op 8 allocs/op
54-
BenchmarkAESEncryptWithCTR-12 979789 1186 ns/op 1312 B/op 8 allocs/op
55-
BenchmarkAESDecryptWithECB-12 2811610 429 ns/op 720 B/op 5 allocs/op
56-
BenchmarkAESDecryptWithCBC-12 2013831 613 ns/op 832 B/op 8 allocs/op
57-
BenchmarkAESDecryptWithCFB-12 1935090 625 ns/op 816 B/op 8 allocs/op
58-
BenchmarkAESDecryptWithOFB-12 1000000 1025 ns/op 1312 B/op 8 allocs/op
59-
BenchmarkAESDecryptWithCTR-12 1000000 1173 ns/op 1312 B/op 8 allocs/op
50+
BenchmarkMD5-12 7447408 156.3 ns/op 112 B/op 2 allocs/op
51+
BenchmarkSHA1-12 6629499 184.2 ns/op 136 B/op 2 allocs/op
52+
BenchmarkSHA224-12 4768708 249.6 ns/op 160 B/op 2 allocs/op
53+
BenchmarkSHA256-12 4755806 256.2 ns/op 160 B/op 2 allocs/op
54+
BenchmarkSHA384-12 3717706 329.8 ns/op 272 B/op 2 allocs/op
55+
BenchmarkSHA512-12 3679125 325.5 ns/op 288 B/op 2 allocs/op
56+
BenchmarkHMAC-12 1215033 988.4 ns/op 512 B/op 6 allocs/op
57+
BenchmarkCRC32IEEE-12 17037747 70.4 ns/op 24 B/op 2 allocs/op
58+
BenchmarkCRC64ISO-12 26904604 44.8 ns/op 8 B/op 1 allocs/op
59+
BenchmarkCRC64ECMA-12 26632101 44.4 ns/op 8 B/op 1 allocs/op
60+
BenchmarkFnv32-12 41738200 28.2 ns/op 8 B/op 1 allocs/op
61+
BenchmarkFnv32a-12 42062208 29.0 ns/op 8 B/op 1 allocs/op
62+
BenchmarkFnv64-12 39065052 29.9 ns/op 8 B/op 1 allocs/op
63+
BenchmarkFnv64a-12 39740802 29.9 ns/op 8 B/op 1 allocs/op
64+
BenchmarkFnv128-12 23474830 50.2 ns/op 16 B/op 1 allocs/op
65+
BenchmarkFnv128a-12 24201123 50.3 ns/op 16 B/op 1 allocs/op
66+
6067
BenchmarkDESEncryptWithECB-12 351558 3444 ns/op 512 B/op 3 allocs/op
6168
BenchmarkDESEncryptWithCBC-12 334164 3668 ns/op 608 B/op 6 allocs/op
6269
BenchmarkDESEncryptWithCFB-12 352360 3566 ns/op 352 B/op 5 allocs/op
@@ -77,23 +84,16 @@ BenchmarkTripleDESDecryptWithCBC-12 117877 9483 ns/op
7784
BenchmarkTripleDESDecryptWithCFB-12 129415 9064 ns/op 608 B/op 5 allocs/op
7885
BenchmarkTripleDESDecryptWithOFB-12 56397 20979 ns/op 1112 B/op 5 allocs/op
7986
BenchmarkTripleDESDecryptWithCTR-12 56103 21694 ns/op 1112 B/op 5 allocs/op
80-
81-
BenchmarkMD5-12 7447408 156.3 ns/op 112 B/op 2 allocs/op
82-
BenchmarkSHA1-12 6629499 184.2 ns/op 136 B/op 2 allocs/op
83-
BenchmarkSHA224-12 4768708 249.6 ns/op 160 B/op 2 allocs/op
84-
BenchmarkSHA256-12 4755806 256.2 ns/op 160 B/op 2 allocs/op
85-
BenchmarkSHA384-12 3717706 329.8 ns/op 272 B/op 2 allocs/op
86-
BenchmarkSHA512-12 3679125 325.5 ns/op 288 B/op 2 allocs/op
87-
BenchmarkHMAC-12 1215033 988.4 ns/op 512 B/op 6 allocs/op
88-
BenchmarkCRC32IEEE-12 17037747 70.4 ns/op 24 B/op 2 allocs/op
89-
BenchmarkCRC64ISO-12 26904604 44.8 ns/op 8 B/op 1 allocs/op
90-
BenchmarkCRC64ECMA-12 26632101 44.4 ns/op 8 B/op 1 allocs/op
91-
BenchmarkFnv32-12 41738200 28.2 ns/op 8 B/op 1 allocs/op
92-
BenchmarkFnv32a-12 42062208 29.0 ns/op 8 B/op 1 allocs/op
93-
BenchmarkFnv64-12 39065052 29.9 ns/op 8 B/op 1 allocs/op
94-
BenchmarkFnv64a-12 39740802 29.9 ns/op 8 B/op 1 allocs/op
95-
BenchmarkFnv128-12 23474830 50.2 ns/op 16 B/op 1 allocs/op
96-
BenchmarkFnv128a-12 24201123 50.3 ns/op 16 B/op 1 allocs/op
87+
BenchmarkAESEncryptWithECB-12 2376924 506 ns/op 960 B/op 6 allocs/op
88+
BenchmarkAESEncryptWithCBC-12 1704799 699 ns/op 1072 B/op 9 allocs/op
89+
BenchmarkAESEncryptWithCFB-12 1890339 632 ns/op 816 B/op 8 allocs/op
90+
BenchmarkAESEncryptWithOFB-12 1000000 1029 ns/op 1312 B/op 8 allocs/op
91+
BenchmarkAESEncryptWithCTR-12 979789 1186 ns/op 1312 B/op 8 allocs/op
92+
BenchmarkAESDecryptWithECB-12 2811610 429 ns/op 720 B/op 5 allocs/op
93+
BenchmarkAESDecryptWithCBC-12 2013831 613 ns/op 832 B/op 8 allocs/op
94+
BenchmarkAESDecryptWithCFB-12 1935090 625 ns/op 816 B/op 8 allocs/op
95+
BenchmarkAESDecryptWithOFB-12 1000000 1025 ns/op 1312 B/op 8 allocs/op
96+
BenchmarkAESDecryptWithCTR-12 1000000 1173 ns/op 1312 B/op 8 allocs/op
9797
9898
BenchmarkRSAEncryptPKCS1v15-12 23575 51665 ns/op 5119 B/op 12 allocs/op
9999
BenchmarkRSAEncryptOAEP-12 23125 54832 ns/op 5475 B/op 18 allocs/op
@@ -108,10 +108,11 @@ BenchmarkRSADecryptOAEP-12 812 1377677 ns/op
108108

109109
### 💪 使用 cryptox 的项目
110110

111-
| 项目 | 作者 | 描述 | 链接 |
112-
|-----|-----|-----|---------------------|
113-
| | | | [Github]() / [码云]() |
111+
| 项目 | 作者 | 描述 | 链接 |
112+
|----|----|----|---------------------|
113+
| | | | [Github]() / [码云]() |
114114

115-
最后,我想感谢 JetBrains 公司的 **free JetBrains Open Source license(s)**,因为 cryptox 是用该计划下的 Idea / GoLand 完成开发的。
115+
最后,我想感谢 JetBrains 公司的 **free JetBrains Open Source license(s)**,因为 cryptox 是用该计划下的 Idea / GoLand
116+
完成开发的。
116117

117118
<a href="https://www.jetbrains.com/?from=cryptox" target="_blank"><img src="./_icons/jetbrains.png" width="250"/></a>

_examples/rsa.go

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ package main
77
import (
88
"fmt"
99

10+
"github.com/FishGoddess/cryptox"
11+
"github.com/FishGoddess/cryptox/hash"
1012
"github.com/FishGoddess/cryptox/rsa"
1113
)
1214

@@ -19,20 +21,43 @@ var (
1921
)
2022

2123
func main() {
22-
msg := []byte("戴上头箍,爱不了你;不戴头箍,救不了你。")
24+
msg := cryptox.FromString("戴上头箍,爱不了你;不戴头箍,救不了你。")
2325
fmt.Printf("Msg: %s\n", msg)
2426

27+
// Use public key to encrypt msg.
2528
encrypted, err := publicKey.EncryptPKCS1v15(msg)
2629
if err != nil {
2730
panic(err)
2831
}
2932

3033
fmt.Printf("Encrypted: %s\n", encrypted.Base64())
3134

35+
// Use private key to decrypt msg.
3236
decrypted, err := privateKey.DecryptPKCS1v15(encrypted)
3337
if err != nil {
3438
panic(err)
3539
}
3640

3741
fmt.Printf("Decrypted: %s\n", decrypted)
42+
43+
msg, err = hash.SHA256(msg)
44+
if err != nil {
45+
panic(err)
46+
}
47+
48+
// Use private key to sign msg.
49+
signed, err := privateKey.SignPKCS1v15(msg)
50+
if err != nil {
51+
panic(err)
52+
}
53+
54+
fmt.Printf("Signed: %s\n", signed)
55+
56+
// Use public key to verify msg.
57+
err = publicKey.VerifyPKCS1v15(msg, signed)
58+
if err != nil {
59+
panic(err)
60+
}
61+
62+
fmt.Println("Verified.")
3863
}

rsa/key.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ func GenerateKeys(bits int, opts ...KeyOption) (PrivateKey, PublicKey, error) {
3636

3737
// GeneratePrivateKey generates a private key of bits.
3838
func GeneratePrivateKey(bits int, opts ...KeyOption) (PrivateKey, error) {
39+
cfg := fromKeyOptions(opts)
40+
3941
privateKey, err := rsa.GenerateMultiPrimeKey(rand.Reader, Primes, bits)
4042
if err != nil {
4143
return PrivateKey{}, err
4244
}
4345

44-
cfg := fromKeyOptions(opts...)
45-
4646
privateKeyBytes, err := cfg.privateKeyEncoder.Encode(privateKey)
4747
if err != nil {
4848
return PrivateKey{}, err
@@ -53,8 +53,8 @@ func GeneratePrivateKey(bits int, opts ...KeyOption) (PrivateKey, error) {
5353

5454
// GeneratePublicKey generates a public key from private key.
5555
func GeneratePublicKey(privateKey PrivateKey, opts ...KeyOption) (PublicKey, error) {
56+
cfg := fromKeyOptions(opts)
5657
publicKey := &(privateKey.Key().PublicKey)
57-
cfg := fromKeyOptions(opts...)
5858

5959
publicKeyBytes, err := cfg.publicKeyEncoder.Encode(publicKey)
6060
if err != nil {
@@ -66,7 +66,7 @@ func GeneratePublicKey(privateKey PrivateKey, opts ...KeyOption) (PublicKey, err
6666

6767
// ParsePrivateKey parses private key from pem bytes.
6868
func ParsePrivateKey(keyBytes cryptox.Bytes, opts ...KeyOption) (PrivateKey, error) {
69-
cfg := fromKeyOptions(opts...)
69+
cfg := fromKeyOptions(opts)
7070

7171
privateKey, err := cfg.privateKeyDecoder.Decode(keyBytes)
7272
if err != nil {
@@ -78,7 +78,7 @@ func ParsePrivateKey(keyBytes cryptox.Bytes, opts ...KeyOption) (PrivateKey, err
7878

7979
// ParsePublicKey parses public key from pem bytes.
8080
func ParsePublicKey(keyBytes cryptox.Bytes, opts ...KeyOption) (PublicKey, error) {
81-
cfg := fromKeyOptions(opts...)
81+
cfg := fromKeyOptions(opts)
8282

8383
publicKey, err := cfg.publicKeyDecoder.Decode(keyBytes)
8484
if err != nil {

0 commit comments

Comments
 (0)