72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package rsa
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
|
||
"archgrid.xyz/ag/toolsbox/encryption/rsa"
|
||
"github.com/spf13/cobra"
|
||
)
|
||
|
||
var (
|
||
rsaKeyOutputFile string
|
||
)
|
||
|
||
var keyGenCmd = &cobra.Command{
|
||
Use: "keygen",
|
||
Short: "生成RSA密钥对",
|
||
Long: `生成RSA密钥对,密钥对将会被保存到指定的文件中。`,
|
||
Args: cobra.NoArgs,
|
||
Run: keyGenExecute,
|
||
}
|
||
|
||
func keyGenExecute(cmd *cobra.Command, args []string) {
|
||
if len(rsaKeyOutputFile) == 0 {
|
||
fmt.Println("必须指定密钥输出文件名的前缀。")
|
||
return
|
||
}
|
||
keyPair, err := rsa.NewKeyPair(rsaKeyLength.IntoRSAKeyLength())
|
||
if err != nil {
|
||
fmt.Printf("无法生成RSA密钥对:%s\n", err)
|
||
return
|
||
}
|
||
privateKeyBytes, err := rsa.EncodePrivateKey(keyPair.PrivateKey)
|
||
if err != nil {
|
||
fmt.Printf("无法编码RSA私钥:%s\n", err)
|
||
return
|
||
}
|
||
privateKeyFile, err := os.OpenFile(rsaKeyOutputFile+".pri.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
|
||
if err != nil {
|
||
fmt.Printf("无法创建RSA私钥文件:%s\n", err)
|
||
return
|
||
}
|
||
defer privateKeyFile.Close()
|
||
_, err = privateKeyFile.Write(privateKeyBytes)
|
||
if err != nil {
|
||
fmt.Printf("无法写入RSA私钥文件:%s\n", err)
|
||
return
|
||
}
|
||
publicKeyBytes, err := rsa.EncodePublicKey(keyPair.PublicKey)
|
||
if err != nil {
|
||
fmt.Printf("无法编码RSA公钥:%s\n", err)
|
||
return
|
||
}
|
||
publicKeyFile, err := os.OpenFile(rsaKeyOutputFile+".pub.pem", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
|
||
if err != nil {
|
||
fmt.Printf("无法创建RSA公钥文件:%s\n", err)
|
||
return
|
||
}
|
||
defer publicKeyFile.Close()
|
||
_, err = publicKeyFile.Write(publicKeyBytes)
|
||
if err != nil {
|
||
fmt.Printf("无法写入RSA公钥文件:%s\n", err)
|
||
return
|
||
}
|
||
fmt.Printf("RSA密钥对已经保存到文件:%s.pri.pem, %s.pub.pem\n", rsaKeyOutputFile, rsaKeyOutputFile)
|
||
}
|
||
|
||
func init() {
|
||
keyGenCmd.Flags().StringVarP(&rsaKeyOutputFile, "output", "o", "", "用于保存密钥输出文件名的前缀。")
|
||
rsaCmd.AddCommand(keyGenCmd)
|
||
}
|