| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package tool
- import (
- "crypto/ed25519"
- "crypto/rand"
- "fmt"
- )
- // GeneratePrivateKey 生成一个新的 Ed25519 私钥
- //
- // 返回值:
- // - privateKey: 生成的 Ed25519 私钥指针
- // - err: 错误信息,如果生成失败则返回错误
- //
- // 示例:
- //
- // privateKey, err := GeneratePrivateKey()
- // if err != nil {
- // // 处理错误
- // }
- // // 使用私钥生成 JWT token
- // token, err := GenerateToken(privateKey, claims)
- func GeneratePrivateKey() (privateKey *ed25519.PrivateKey, err error) {
- // 使用 crypto/rand 生成安全的随机数作为种子
- // Ed25519 私钥实际上是 32 字节的种子,公钥由种子推导而来
- var seed [32]byte
- // 从加密安全的随机数生成器读取种子
- _, err = rand.Read(seed[:])
- if err != nil {
- return nil, fmt.Errorf("生成随机种子失败: %w", err)
- }
- // 使用种子生成 Ed25519 密钥对
- // ed25519.NewKeyFromSeed 返回的是 ed25519.PrivateKey 类型(实际上是 []byte)
- privKey := ed25519.NewKeyFromSeed(seed[:])
- // 验证生成的私钥长度是否正确
- if len(privKey) != ed25519.PrivateKeySize {
- return nil, fmt.Errorf("生成的私钥长度无效: 期望 %d 字节,实际 %d 字节",
- ed25519.PrivateKeySize, len(privKey))
- }
- // 返回私钥的指针
- return &privKey, nil
- }
|