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

Функция rsa.VerifyPSS

Функция rsa.VerifyPSS проверяет цифровую подпись, созданную с помощью алгоритма RSA и схемы PSS (Probabilistic Signature Scheme). Она принимает открытый ключ, хеш-функцию, хеш подписанного сообщения, подпись и опции PSS. Функция возвращает nil, если подпись действительна, или ошибку, если проверка не удалась.

Синтаксис

err := rsa.VerifyPSS(pub *rsa.PublicKey, hash crypto.Hash, hashed []byte, sig []byte, opts *rsa.PSSOptions)

Параметры функции:

  • pub — открытый ключ RSA (тип *rsa.PublicKey);
  • hash — алгоритм хеширования (тип crypto.Hash);
  • hashed — хеш сообщения (тип []byte);
  • sig — подпись для проверки (тип []byte);
  • opts — дополнительные опции PSS (тип *rsa.PSSOptions).

Пример

Проверим подпись, созданную с использованием SHA-256:

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { // Генерируем ключевую пару RSA privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println("Ошибка генерации ключа:", err) return } pubKey := &privateKey.PublicKey // Сообщение для подписи message := "Hello, PSS verification!" hash := sha256.Sum256([]byte(message)) // Создаем подпись signature, err := rsa.SignPSS(rand.Reader, privateKey, crypto.SHA256, hash[:], nil) if err != nil { fmt.Println("Ошибка создания подписи:", err) return } // Проверяем подпись err = rsa.VerifyPSS(pubKey, crypto.SHA256, hash[:], signature, nil) if err == nil { fmt.Println("Подпись действительна") } else { fmt.Println("Подпись недействительна:", err) } }

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

"Подпись действительна"

Пример

Проверим подпись с настройкой соли и сравнительным хешем:

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println("Ошибка генерации ключа:", err) return } pubKey := &privateKey.PublicKey message := "Another message for verification" hash := sha256.Sum256([]byte(message)) // Создаем подпись с опциями PSS opts := &rsa.PSSOptions{ SaltLength: rsa.PSSSaltLengthAuto, Hash: crypto.SHA256, } signature, err := rsa.SignPSS(rand.Reader, privateKey, crypto.SHA256, hash[:], opts) if err != nil { fmt.Println("Ошибка создания подписи:", err) return } // Проверяем подпись с теми же опциями err = rsa.VerifyPSS(pubKey, crypto.SHA256, hash[:], signature, opts) if err == nil { fmt.Println("Подпись успешно проверена") } else { fmt.Println("Ошибка проверки подписи:", err) } }

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

"Подпись успешно проверена"

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

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