Skip to content

Latest commit

 

History

History
108 lines (77 loc) · 3.95 KB

README.md

File metadata and controls

108 lines (77 loc) · 3.95 KB

toast(土司)

起因

  • 项目从JAVA迁移到Go后,由于之前JAVA项目AES加密时使用的是默认ECB在Go中不被支持,只能自己动手实现一个,最后越做越多,就把Go AES/DES加密解密都做了个简单的封装,方便日后使用。目前支持RSA/AES/DES加密解密

例子

AES

mode := cipher.NewCBCMode()                         //加密工作模式,支持 CBC ECB CFB CTR 四种工作模式
cipher, err := crypto.NewAESWith([]byte(key), mode) //创建一个AES 加密的builder
if err != nil {
	t.Error(err)
	return
}

planttext := `故经之以五事,校之以计而索其情:一曰道,二曰天,三曰地,四曰将,五曰法。道者,令民与上同意也,故可与之死,可与之生,而不畏危。天者,阴阳、寒暑、时制也。地者,高下、远近、险易、广狭、死生也。将者,智、信、仁、勇、严也。法者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知者不胜。故校之以计而索其情,曰:主孰有道?将孰有能?天地孰得?法令孰行?兵众孰强?士卒孰练?赏罚孰明?吾以此知胜负矣。`

ciphertext := cipher.Encrypt([]byte(planttext))

ciphertextWithBase64 := base64.URLEncoding.EncodeToString(ciphertext)

fmt.Println(ciphertextWithBase64)

ciphertext, err = base64.URLEncoding.DecodeString(ciphertextWithBase64)
if err != nil {
	t.Error(err)
}
planttextBytes := cipher.Decrypt(ciphertext)

fmt.Println(string(planttextBytes))

DES

cipher, err := crypto.NewDES([]byte("Z'{ru/^e"))
if err != nil {
	t.Error(err)
	return
}

plant := `故经之以五事,校之以计而索其情:一曰道,二曰天,三曰地,四曰将,五曰法。道者,令民与上同意也,故可与之死,可与之生,而不畏危。天者,阴阳、寒暑、时制也。地者,高下、远近、险易、广狭、死生也。将者,智、信、仁、勇、严也。法者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知者不胜。故校之以计而索其情,曰:主孰有道?将孰有能?天地孰得?法令孰行?兵众孰强?士卒孰练?赏罚孰明?吾以此知胜负矣。`

cp := cipher.Encrypt([]byte(plant))

cpStr := base64.URLEncoding.EncodeToString(cp)

fmt.Println(cpStr)

ppBy, err := base64.URLEncoding.DecodeString(cpStr)
if err != nil {
	t.Error(err)
}
pp := cipher.Decrypt(ppBy)
fmt.Println(string(pp))

fmt.Println("Test_DES_CBC ok")

RSA

plant := `故经之以五事,校之以计而索其情:一曰道,二曰天,三曰地,四曰将,五曰法。道者,令民与上同意也,故可与之死,可与之生,而不畏危。天者,阴阳、寒暑、时制也。地者,高下、远近、险易、广狭、死生也。将者,智、信、仁、勇、严也。法者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知者不胜。故校之以计而索其情,曰:主孰有道?将孰有能?天地孰得?法令孰行?兵众孰强?士卒孰练?赏罚孰明?吾以此知胜负矣。`

key, err := rsa.LoadKeyFromPEMFile(
	`/Users/alex/Documents/go/src/toast/crypto/rsa_public_key.pem`,
	`/Users/alex/Documents/go/src/toast/crypto/rsa_private_key.pem`,
	rsa.ParsePKCS8Key)
if err != nil {
	t.Error(err)
	return
}

cipher, err := crypto.NewRSA(key)
if err != nil {
	t.Error(err)
	return
}

enT, err := cipher.Encrypt([]byte(plant))
if err != nil {
	t.Error(err)
	return
}

fmt.Println(base64.StdEncoding.EncodeToString(enT))

deT, err := cipher.Decrypt(enT)
if err != nil {
	t.Error(err)
	return
}

fmt.Println(string(deT))

signBytes, err := cipher.Sign([]byte(plant), SHA1)
if err != nil {
	t.Error(err)
	return
}

sign := base64.StdEncoding.EncodeToString(signBytes)

fmt.Println(sign)

errV := cipher.Verify([]byte(plant), signBytes, SHA1)
if errV != nil {
	t.Error(errV)
	return
}