二阶段差不多

This commit is contained in:
2026-06-01 19:46:51 +08:00
parent 9e50d05e71
commit 4e233c82b4
34 changed files with 1631 additions and 67 deletions
+42
View File
@@ -0,0 +1,42 @@
package dkim
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"fmt"
)
// GenerateKeyPair 生成 2048 位 RSA 密钥对,返回 PEM 编码的私钥和公钥
func GenerateKeyPair() (privateKeyPEM, publicKeyPEM string, err error) {
key, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
return "", "", fmt.Errorf("生成RSA密钥对失败: %w", err)
}
privBytes := x509.MarshalPKCS1PrivateKey(key)
privPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: privBytes})
pubBytes, err := x509.MarshalPKIXPublicKey(&key.PublicKey)
if err != nil {
return "", "", fmt.Errorf("编码公钥失败: %w", err)
}
pubPEM := pem.EncodeToMemory(&pem.Block{Type: "PUBLIC KEY", Bytes: pubBytes})
return string(privPEM), string(pubPEM), nil
}
// GetDKIMDNSRecord 生成 DKIM DNS TXT 记录值
// 格式: v=DKIM1; k=rsa; p=<base64公钥>
func GetDKIMDNSRecord(publicKeyPEM string) string {
if publicKeyPEM == "" {
return ""
}
block, _ := pem.Decode([]byte(publicKeyPEM))
if block == nil {
return ""
}
return fmt.Sprintf("v=DKIM1; k=rsa; p=%s", base64.StdEncoding.EncodeToString(block.Bytes))
}