|
|
- package crypter
-
- import (
- "crypto/rand"
- "crypto/rsa"
- "crypto/x509"
- "encoding/base64"
- "encoding/pem"
- "errors"
- "log"
- "os"
- )
-
- func RSA_Decode(encryptedData string, privateKey string) (string, error) {
-
- // 解码PEM格式的私钥
- block, _ := pem.Decode([]byte(privateKey))
- if block == nil {
- // fmt.Println("Failed to decode PEM private key")
- return "", errors.New("私钥解码失败")
- }
-
- // 解析RSA私钥
- privKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
- if err != nil {
- log.Println("Failed to parse RSA private key", err)
- return "", errors.New("私钥解析失败")
- }
-
- // 解密Base64编码的数据
- encryptedBytes, _ := base64.StdEncoding.DecodeString(encryptedData)
-
- // 使用RSA私钥进行解密
- decryptedBytes, err := rsa.DecryptPKCS1v15(rand.Reader, privKey, encryptedBytes)
- if err != nil {
- // fmt.Println("Failed to decrypt data")
- return "", errors.New("解密失败")
- }
-
- // 将解密后的字节转换为字符串
- return string(decryptedBytes), nil
- }
-
- func RSA_Encode(public_key string, msg string) (string, error) {
-
- // publicKeyFile, err := ioutil.ReadFile(public_key)
- // if err != nil {
- // log.Println("Failed to read public key file:", err)
- // return "", errors.New("没有公钥")
- // }
-
- block, _ := pem.Decode([]byte(public_key))
- if block == nil {
- log.Println("Failed to decode public key PEM.")
- return "", errors.New("公钥解码失败")
- }
-
- publicKey, err := x509.ParsePKIXPublicKey(block.Bytes)
- if err != nil {
- log.Println("Failed to parse public key:", err)
- return "", errors.New("公钥解析失败")
- }
-
- rsaPublicKey, ok := publicKey.(*rsa.PublicKey)
- if !ok {
- log.Println("Failed to get RSA public key.")
- return "", errors.New("公钥错误")
- }
-
- plainText := []byte(msg)
-
- cipherText, err := rsa.EncryptPKCS1v15(rand.Reader, rsaPublicKey, plainText)
- if err != nil {
- log.Println("Failed to encrypt data:", err)
- return "", errors.New("加密失败")
- }
-
- return string(cipherText), nil
- }
- func Create(private_pem_file, public_pem_file string) {
- // 生成 RSA 密钥对
- privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
- if err != nil {
- log.Println("无法生成私钥:", err)
- return
- }
-
- // 将私钥保存到文件
- privateKeyFile, err := os.Create(private_pem_file)
- if err != nil {
- log.Println("无法创建私钥文件:", err)
- return
- }
- defer privateKeyFile.Close()
-
- privateKeyBlock := &pem.Block{
- Type: "RSA PRIVATE KEY",
- Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
- }
-
- err = pem.Encode(privateKeyFile, privateKeyBlock)
- if err != nil {
- log.Println("无法写入私钥文件:", err)
- return
- }
-
- log.Println("私钥已保存到", private_pem_file)
-
- // 生成公钥
- publicKey := &privateKey.PublicKey
-
- // 将公钥保存到文件
- publicKeyFile, err := os.Create(public_pem_file)
- if err != nil {
- log.Println("无法创建公钥文件:", err)
- return
- }
- defer publicKeyFile.Close()
-
- publicKeyBytes, err := x509.MarshalPKIXPublicKey(publicKey)
- if err != nil {
- log.Println("无法编码公钥:", err)
- return
- }
-
- publicKeyBlock := &pem.Block{
- Type: "PUBLIC KEY",
- Bytes: publicKeyBytes,
- }
-
- err = pem.Encode(publicKeyFile, publicKeyBlock)
- if err != nil {
- log.Println("无法写入公钥文件:", err)
- return
- }
-
- log.Println("公钥已保存到", public_pem_file)
- }
|