-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
290 additions
and
155 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
package main | ||
|
||
import ( | ||
"crypto/rand" | ||
"crypto/rsa" | ||
"crypto/x509" | ||
"encoding/pem" | ||
"os" | ||
) | ||
|
||
//生成RSA私钥和公钥,保存到文件中 | ||
func GenerateRSAKey(bits int) { | ||
//GenerateKey函数使用随机数据生成器random生成一对具有指定字位数的RSA密钥 | ||
//Reader是一个全局、共享的密码用强随机数生成器 | ||
privateKey, err := rsa.GenerateKey(rand.Reader, bits) | ||
if err != nil { | ||
panic(err) | ||
} | ||
//保存私钥 | ||
//通过x509标准将得到的ras私钥序列化为ASN.1 的 DER编码字符串 | ||
X509PrivateKey := x509.MarshalPKCS1PrivateKey(privateKey) | ||
//使用pem格式对x509输出的内容进行编码 | ||
//创建文件保存私钥 | ||
privateFile, err := os.Create("private.pem") | ||
if err != nil { | ||
panic(err) | ||
} | ||
defer privateFile.Close() | ||
//构建一个pem.Block结构体对象 | ||
privateBlock := pem.Block{Type: "RSA Private Key", Bytes: X509PrivateKey} | ||
//将数据保存到文件 | ||
pem.Encode(privateFile, &privateBlock) | ||
|
||
//保存公钥 | ||
//获取公钥的数据 | ||
publicKey := privateKey.PublicKey | ||
//X509对公钥编码 | ||
X509PublicKey, err := x509.MarshalPKIXPublicKey(&publicKey) | ||
if err != nil { | ||
panic(err) | ||
} | ||
//pem格式编码 | ||
//创建用于保存公钥的文件 | ||
publicFile, err := os.Create("public.pem") | ||
if err != nil { | ||
panic(err) | ||
} | ||
defer publicFile.Close() | ||
//创建一个pem.Block结构体对象 | ||
publicBlock := pem.Block{Type: "RSA Public Key", Bytes: X509PublicKey} | ||
//保存到文件 | ||
pem.Encode(publicFile, &publicBlock) | ||
} | ||
|
||
//RSA加密 | ||
func RSA_Encrypt(plainText []byte, path string) []byte { | ||
//打开文件 | ||
file, err := os.Open(path) | ||
if err != nil { | ||
panic(err) | ||
} | ||
defer file.Close() | ||
//读取文件的内容 | ||
info, _ := file.Stat() | ||
buf := make([]byte, info.Size()) | ||
file.Read(buf) | ||
//pem解码 | ||
block, _ := pem.Decode(buf) | ||
//x509解码 | ||
|
||
publicKeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes) | ||
if err != nil { | ||
panic(err) | ||
} | ||
//类型断言 | ||
publicKey := publicKeyInterface.(*rsa.PublicKey) | ||
//对明文进行加密 | ||
cipherText, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, plainText) | ||
if err != nil { | ||
panic(err) | ||
} | ||
//返回密文 | ||
return cipherText | ||
} | ||
|
||
//RSA解密 | ||
func RSA_Decrypt(cipherText []byte, path string) []byte { | ||
//打开文件 | ||
file, err := os.Open(path) | ||
if err != nil { | ||
panic(err) | ||
} | ||
defer file.Close() | ||
//获取文件内容 | ||
info, _ := file.Stat() | ||
buf := make([]byte, info.Size()) | ||
file.Read(buf) | ||
//pem解码 | ||
block, _ := pem.Decode(buf) | ||
//X509解码 | ||
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes) | ||
if err != nil { | ||
panic(err) | ||
} | ||
//对密文进行解密 | ||
plainText, _ := rsa.DecryptPKCS1v15(rand.Reader, privateKey, cipherText) | ||
//返回明文 | ||
return plainText | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.