ag_tools/cmd/aes.go

114 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cmd
import (
"fmt"
"archgrid.xyz/ag/tools/types"
"archgrid.xyz/ag/toolsbox/encryption"
"archgrid.xyz/ag/toolsbox/encryption/aes"
"archgrid.xyz/ag/toolsbox/serialize/base64"
"archgrid.xyz/ag/toolsbox/serialize/hex"
"github.com/spf13/cobra"
)
var (
aesKey string
aesResult types.ResultEncoding = types.ResultInHex
aesPadding types.EncryptionPadding = types.PKCS7Padding
)
var aesCommand = &cobra.Command{
Use: "aes",
Short: "AES加密算法工具",
Long: `使用AES加密算法加密或解密数据在使用的时候注意明文和密文中如果包含空格或特殊字符需要使用双引号包裹起来。`,
}
var aesEncryptCmd = &cobra.Command{
Use: "encrypt",
Short: "使用AES加密算法加密",
Long: "使用AES加密算法加密支持三种填充方式PKCS7、Zero和无填充。默认输出十六进制编码字符串。",
Args: cobra.MinimumNArgs(1),
Run: aesEncryptExecute,
}
func aesEncryptExecute(cmd *cobra.Command, args []string) {
var pad encryption.PaddingMode
switch aesPadding {
case types.PKCS7Padding:
pad = encryption.PKCS7Padding
case types.ZeroPadding:
pad = encryption.ZeroPadding
case types.NoPadding:
pad = encryption.NoPadding
default:
fmt.Printf("不支持的填充方式:%s\n", aesPadding)
return
}
encodedResult, err := aes.Encrypt([]byte(args[0]), []byte(aesKey), pad)
if err != nil {
fmt.Printf("加密失败:%s\n", err)
return
}
switch aesResult {
case types.ResultInBase64:
fmt.Printf("加密结果:%s\n", base64.ToBase64(encodedResult))
case types.ResultInHex:
fallthrough
default:
fmt.Printf("加密结果:%s\n", hex.ToHex(encodedResult))
}
}
var aesDecryptCmd = &cobra.Command{
Use: "decrypt",
Short: "使用AES加密算法解密",
Long: "使用AES加密算法解密支持三种填充方式PKCS7、Zero和无填充。默认输入十六进制编码字符串。",
Args: cobra.MinimumNArgs(1),
Run: aesDecryptExecute,
}
func aesDecryptExecute(cmd *cobra.Command, args []string) {
var pad encryption.PaddingMode
switch aesPadding {
case types.PKCS7Padding:
pad = encryption.PKCS7Padding
case types.ZeroPadding:
pad = encryption.ZeroPadding
case types.NoPadding:
pad = encryption.NoPadding
default:
fmt.Printf("不支持的填充方式:%s\n", aesPadding)
return
}
var (
data []byte
err error
)
switch aesResult {
case types.ResultInBase64:
data, err = base64.FromBase64(args[0])
case types.ResultInHex:
fallthrough
default:
data, err = hex.FromHex(args[0])
}
if err != nil {
fmt.Printf("解密失败,提供的密文无法解析,%s\n", err)
return
}
decodeResult, err := aes.Decrypt(data, []byte(aesKey), pad)
if err != nil {
fmt.Printf("解密失败:%s\n", err)
return
}
fmt.Printf("解密结果:%s\n", decodeResult)
}
func init() {
aesCommand.PersistentFlags().StringVarP(&aesKey, "key", "k", "", "密钥")
aesCommand.PersistentFlags().VarP(&aesResult, "output", "o", "输入或输出使用Base64编码或者Hex编码默认为Hex编码。")
aesCommand.PersistentFlags().VarP(&aesPadding, "padding", "p", "填充方式可选值pkcs7、zero、none默认使用pkcs7。")
aesCommand.AddCommand(aesEncryptCmd, aesDecryptCmd)
rootCmd.AddCommand(aesCommand)
}