РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1263 of 1593 menu

Функция rsa.SignPKCS1v15

Функция rsa.SignPKCS1v15 создает цифровую подпись для переданного хеша сообщения с использованием закрытого ключа RSA. Первым аргументом передается источник случайных данных (обычно rand.Reader), вторым — закрытый ключ (*rsa.PrivateKey), третьим — хеш-функция (тип crypto.Hash), а четвертым — хеш сообщения в виде байтового среза. Функция возвращает подпись в виде []byte или ошибку, если подпись не удалось создать.

Важно, что длина хеша должна соответствовать выбранной хеш-функции. Например, для sha256.New хеш должен быть длиной 32 байта. Функция используется для асимметричной подписи данных, где закрытый ключ хранится в секрете, а открытый ключ используется для верификации подписи с помощью rsa.VerifyPKCS1v15.

Синтаксис

func SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error)

Пример

Создадим подпись для сообщения с использованием хеша SHA-256:

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" "log" ) func main() { // Генерируем закрытый ключ (в реальном приложении он загружается из защищенного хранилища) privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { log.Fatal(err) } // Сообщение для подписи message := "Important data" hash := sha256.Sum256([]byte(message)) // Создаем подпись signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash[:]) if err != nil { log.Fatal(err) } fmt.Printf("Signature: %x\n", signature) }

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

"Signature: 4a7b8c9d... (длинная шестнадцатеричная строка)"

Пример

Проверим, что функция возвращает ошибку при передаче неверной длины хеша:

package main import ( "crypto" "crypto/rand" "crypto/rsa" "log" ) func main() { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { log.Fatal(err) } // Некорректный хеш (должен быть 32 байта для SHA-256) wrongHash := []byte("short") _, err = rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, wrongHash) if err != nil { log.Printf("Error: %v", err) } }

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

"Error: crypto/rsa: input must be hashed message"

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

  • функцию rsa.VerifyPKCS1v15,
    которая верифицирует подпись RSA PKCS#1 v1.5
  • функцию rsa.SignPSS,
    которая создает подпись с использованием схемы PSS
  • функцию rsa.GenerateKey,
    которая генерирует пару RSA-ключей
  • функцию sha256.Sum256,
    которая вычисляет SHA-256 хеш для сообщения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить