Skip to content

Commit 452a36c

Browse files
committed
重构 rsa 代码
1 parent e10d981 commit 452a36c

26 files changed

+989
-1771
lines changed

_examples/rsa.go

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,52 +7,59 @@ package main
77
import (
88
"fmt"
99

10+
"github.com/FishGoddess/cryptox/bytes/encoding"
1011
"github.com/FishGoddess/cryptox/hash"
1112
"github.com/FishGoddess/cryptox/rsa"
1213
)
1314

14-
var (
15-
// Use public key to encrypt msg.
16-
publicKey = rsa.MustLoadPublicKey("rsa.pub")
15+
func main() {
16+
// Load the private key and the public key from file.
17+
privateKey, err := rsa.LoadPrivateKey("rsa.key")
18+
if err != nil {
19+
panic(err)
20+
}
1721

18-
// Use private key to decrypt msg.
19-
privateKey = rsa.MustLoadPrivateKey("rsa.key")
20-
)
22+
publicKey, err := rsa.LoadPublicKey("rsa.pub")
23+
if err != nil {
24+
panic(err)
25+
}
2126

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

26-
// Use public key to encrypt msg.
27-
encrypted, err := publicKey.EncryptPKCS1v15(msg)
30+
// Use the public key to encrypt msg using base64 encoding.
31+
label := []byte("你好,世界")
32+
33+
encrypt, err := publicKey.EncryptOAEP(msg, label, encoding.Base64)
2834
if err != nil {
2935
panic(err)
3036
}
3137

32-
fmt.Printf("Encrypted: %s\n", encrypted.Base64())
38+
fmt.Printf("encrypt: %s\n", encrypt)
3339

34-
// Use private key to decrypt msg.
35-
decrypted, err := privateKey.DecryptPKCS1v15(encrypted)
40+
// Use the private key to decrypt msg using base64 encoding.
41+
decrypt, err := privateKey.DecryptOAEP(encrypt, label, encoding.Base64)
3642
if err != nil {
3743
panic(err)
3844
}
3945

40-
fmt.Printf("Decrypted: %s\n", decrypted)
46+
fmt.Printf("decrypt: %s\n", decrypt)
47+
48+
// Use the private key to sign msg.
49+
digest := hash.SHA256(msg, encoding.Hex)
4150

42-
// Use private key to sign msg.
43-
msg = hash.SHA256(msg)
44-
signed, err := privateKey.SignPKCS1v15(msg)
51+
sign, err := privateKey.SignPSS(digest, 0, encoding.Hex)
4552
if err != nil {
4653
panic(err)
4754
}
4855

49-
fmt.Printf("Signed: %s\n", signed)
56+
fmt.Printf("sign: %s\n", sign)
5057

51-
// Use public key to verify msg.
52-
err = publicKey.VerifyPKCS1v15(msg, signed)
58+
// Use the public key to verify the sign.
59+
err = publicKey.VerifyPSS(digest, sign, 0, encoding.Hex)
5360
if err != nil {
5461
panic(err)
5562
}
5663

57-
fmt.Println("Verified.")
64+
fmt.Println("verify: %s\n", digest)
5865
}

_examples/rsa.key

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCnoCnYqtdcxo2Z
3+
zcrpkfHYg+s/gGrlt7Ww//gBJfcCZ64ls4fD4I0BD+Xe0WHuT5poow6Cyyl20yrv
4+
Y13oqlRr05bsnPpu2ZOiEPfiAQb898xgYYwoDwLEk75Uu1ox53unhhZbRKNne1V1
5+
QMYFpxAgeAMxML09ZmEqPp3q0BNZcjZqaq/2umHVOBOrqrRJZG7APZpixAvwbRKJ
6+
zELq40s0zD6ECovZk/3WVF8BEcrmybmnbns1Y89ptXFZIQVKPqHXUK9+VbIiKZsU
7+
+UKpY29WKjOkELcSrG7HMZbIXivzswGn5c0DskXQ/TbzV5WNxpW07Op0s3y9G7n+
8+
kTcytZETAgMBAAECggEACpRE/9aBwr+0lnU9WLIW0Y47LdCk2ScChw9omhNI0cnf
9+
B6RwgvAW8MRi7XCeiHlVVURGjqz+ysU3YPtkT7esSKUxJxwd1sV8QqQP2PTX+ZA0
10+
Fw3LrYg2VFdqEZPvdICCYTIeaBfeuOcOSi5Shm8i8+xPG0QoYAnS7mUcTK0MLj65
11+
FYcb1p7rteeqpQwKqekaAEqOo084Nbs10++ltct3wM4xOvEFJubdMUj6kruOVwG5
12+
onuyONTWQ9U1akSRwlx1HnafieTG/Rsvx+6FT4wAgioZy3JKlWsLckI0K5zi/YSz
13+
Z0ZeqdtGLI7JbYIKv+H+zeLv0mPErwOXJk0qm3b6eQKBgQDJVMYzwB1BIVU545dz
14+
8+YX69WfFVjH9RSJ+9monq6fu0QW6s2qH4O8DCKqG5fuSAXPVzYvVrEDV4KGsyPG
15+
m0uQteM5om7ICIQVvewxBiaDX0bvFwiK7gfzdLVMgYirrkxZUQ4NgGTRScAP2ysm
16+
sOn52Om5ZK5JZ3v8C/aQU/D5CQKBgQDVJGcDV7XlOVMptAVICEP4G+jg2fS9ORlz
17+
TkgpK8sw1l1P6eO9WU2TrOh8UCQFntVe5YwgzQuBK4PJACsbHqx1Xww57MI1dlIQ
18+
p2vP6dFmVlneIrcHXZ4QRQug6Envp03Smnbzf9clDCAtZkt3gGDc2r0yxn8AY6rE
19+
+q6mITHMOwKBgQC7ernmzutvDv8yHQGX9HM7q10N+u7lpQ8vPtt87edmzxekz5oc
20+
5aPipNpS1ccxGNhwL6JBitTja8YccQzLkSlY5EdoEB5hH60AIg+jxzpt83c2hZhq
21+
5yV4TCHX0HfYh0KJmbUgVYOMcMTs/wa7zNrU0m0zOtIhgMAwAWPlGoW3IQKBgHSs
22+
l6NRySVwiuCiRd3XgHV5ubIUPY+ziQYAjSnUakcSoUPUkbEeCIRVO3KJYB6fgseO
23+
unVeKPUNf/dwmygeU2Nwoz22J92iJmwtaawHn3P4wvsBX9WtXpAja6kqXwbMO6KU
24+
oZbLnVcPWzHe9GK3KM7dAoKf+/eXl2x6mU4hj6PvAoGBALKTzLcqAr7n+TqcRAJU
25+
nm44K4zj52Nj0lpritovFbP1EiVoj07AFqFULE3aHMeGKwe+aNxz5JTSHPaP6aa9
26+
iD4CVoJzQ41OimqHnnRSgy3g+ylk7plLk/M0rE+6Ev945Xv8vGOGci6KgkBpOx37
27+
/yglpQbyju+BbRvq9gDfLuKX
28+
-----END PRIVATE KEY-----

_examples/rsa.pub

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp6Ap2KrXXMaNmc3K6ZHx
3+
2IPrP4Bq5be1sP/4ASX3AmeuJbOHw+CNAQ/l3tFh7k+aaKMOgsspdtMq72Nd6KpU
4+
a9OW7Jz6btmTohD34gEG/PfMYGGMKA8CxJO+VLtaMed7p4YWW0SjZ3tVdUDGBacQ
5+
IHgDMTC9PWZhKj6d6tATWXI2amqv9rph1TgTq6q0SWRuwD2aYsQL8G0SicxC6uNL
6+
NMw+hAqL2ZP91lRfARHK5sm5p257NWPPabVxWSEFSj6h11CvflWyIimbFPlCqWNv
7+
ViozpBC3EqxuxzGWyF4r87MBp+XNA7JF0P0281eVjcaVtOzqdLN8vRu5/pE3MrWR
8+
EwIDAQAB
9+
-----END PUBLIC KEY-----

_examples/rsa_key.go

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,60 +5,35 @@
55
package main
66

77
import (
8-
"fmt"
9-
108
"github.com/FishGoddess/cryptox/rsa"
119
)
1210

1311
func main() {
14-
// Generate a 4096 bits key.
15-
// Check rsa.KeyOption for more information of encoder and decoder.
16-
privateKey, publicKey, err := rsa.GenerateKeys(4096)
12+
// Generate a 2048 bits key.
13+
privateKey, publicKey, err := rsa.GenerateKeys(2048)
1714
if err != nil {
1815
panic(err)
1916
}
2017

21-
fmt.Println(privateKey)
22-
fmt.Println(publicKey)
23-
24-
// Try WriteToFile if you want to write your private key to file.
25-
n, err := privateKey.Bytes().WriteToFile("rsa.key")
18+
// Store the private key and the public key to file.
19+
err = rsa.StorePrivateKey("rsa.key", privateKey)
2620
if err != nil {
2721
panic(err)
2822
}
2923

30-
fmt.Printf("Write %d bytes to private key file\n", n)
31-
32-
// Try WriteToFile if you want to write your public key to file.
33-
n, err = publicKey.Bytes().WriteToFile("rsa.pub")
24+
err = rsa.StorePublicKey("rsa.pub", publicKey)
3425
if err != nil {
3526
panic(err)
3627
}
3728

38-
fmt.Printf("Write %d bytes to public key file\n", n)
39-
40-
// Load private key from file.
41-
loadedPrivateKey, err := rsa.LoadPrivateKey("rsa.key")
29+
// Load the private key and the public key from file.
30+
privateKey, err = rsa.LoadPrivateKey("rsa.key")
4231
if err != nil {
4332
panic(err)
4433
}
4534

46-
// Load public key from file.
47-
loadedPublicKey, err := rsa.LoadPublicKey("rsa.pub")
35+
publicKey, err = rsa.LoadPublicKey("rsa.pub")
4836
if err != nil {
4937
panic(err)
5038
}
51-
52-
fmt.Println(loadedPrivateKey)
53-
fmt.Println(loadedPublicKey)
54-
55-
// Want to load keys from file and panic if failed?
56-
// Try these:
57-
loadedPrivateKey = rsa.MustLoadPrivateKey("rsa.key")
58-
loadedPublicKey = rsa.MustLoadPublicKey("rsa.pub")
59-
60-
// Already have a private or public key in bytes?
61-
// Try these:
62-
_, _ = rsa.ParsePrivateKey(privateKey.Bytes())
63-
_, _ = rsa.ParsePublicKey(publicKey.Bytes())
6439
}

0 commit comments

Comments
 (0)