Функция rsa.GenerateKey

Функция rsa.GenerateKey генерирует новую пару RSA-ключей (приватный и публичный). В первый параметр необходимо передать криптографически безопасный генератор случайных чисел, обычно это rand.Reader из пакета crypto/rand. Во второй параметр передается размер ключа в битах (рекомендуемый минимум - 2048 бит). Функция возвращает указатель на структуру rsa.PrivateKey и ошибку, если генерация не удалась.

Синтаксис

gorsa.GenerateKey(rand io.Reader, bits int) (*rsa.PrivateKey, error)

Пример

Давайте сгенерируем RSA-ключ размером 2048 бит и выведем размеры публичного и приватного ключей:

gopackage main

import (
  "crypto/rand"
  "crypto/rsa"
  "fmt"
)

func main() {
  privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
  if err != nil {
    fmt.Println("Error generating key:", err)
    return
  }

  publicKey := &privateKey.PublicKey
  fmt.Printf("Private key size: %d bits\n", privateKey.N.BitLen())
  fmt.Printf("Public key size: %d bits\n", publicKey.N.BitLen())
}

Результат выполнения кода:

go"Private key size: 2048 bits"
"Public key size: 2048 bits"

Пример

Сгенерируем ключ размером 1024 бита и проверим, что он не является нулевым:

gopackage main

import (
  "crypto/rand"
  "crypto/rsa"
  "fmt"
)

func main() {
  privateKey, err := rsa.GenerateKey(rand.Reader, 1024)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  if privateKey != nil && privateKey.N != nil {
    fmt.Println("Key generated successfully")
  }
}

Результат выполнения кода:

go"Key generated successfully"

Пример

Сгенерируем ключ с нестандартным размером 4096 бит и выведем его публичную экспоненту:

gopackage main

import (
  "crypto/rand"
  "crypto/rsa"
  "fmt"
)

func main() {
  privateKey, err := rsa.GenerateKey(rand.Reader, 4096)
  if err != nil {
    fmt.Println("Failed:", err)
    return
  }

  fmt.Printf("Public exponent: %d\n", privateKey.PublicKey.E)
}

Результат выполнения кода:

go"Public exponent: 65537"

Смотрите также

  • функцию rsa.EncryptPKCS1v15,
    которая шифрует данные с использованием RSA PKCS#1 v1.5
  • функцию rsa.DecryptPKCS1v15,
    которая расшифровывает данные с использованием RSA PKCS#1 v1.5
  • функцию rsa.SignPKCS1v15,
    которая создает подпись с использованием RSA PKCS#1 v1.5
  • функцию rsa.VerifyPKCS1v15,
    которая проверяет подпись RSA PKCS#1 v1.5