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

Функция rsa.VerifyPKCS1v15

Функция rsa.VerifyPKCS1v15 проверяет корректность цифровой подписи, созданной с использованием алгоритма RSA и схемы подписи PKCS#1 v1.5. В первый параметр функция принимает открытый ключ rsa.PublicKey, во второй параметр - хеш-функцию crypto.Hash, в третий параметр - хеш подписываемого сообщения, в четвертый параметр - подпись для проверки. Функция возвращает error: nil, если подпись верна, или ошибку в противном случае.

Синтаксис

rsa.VerifyPKCS1v15(pub *rsa.PublicKey, hash crypto.Hash, hashed []byte, sig []byte) error

Пример

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

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 } publicKey := &privateKey.PublicKey // Сообщение для подписи message := []byte("Hello, World!") // Вычисляем хеш сообщения hash := sha256.Sum256(message) // Создаем подпись signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash[:]) if err != nil { fmt.Println(err) return } // Проверяем подпись err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hash[:], signature) if err != nil { fmt.Println("Подпись неверна:", err) return } fmt.Println("Подпись верна") }

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

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

Пример

Давайте проверим подпись для неверного сообщения:

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 } publicKey := &privateKey.PublicKey // Оригинальное сообщение originalMessage := []byte("Hello, World!") originalHash := sha256.Sum256(originalMessage) // Создаем подпись для оригинального сообщения signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, originalHash[:]) if err != nil { fmt.Println(err) return } // Измененное сообщение fakeMessage := []byte("Fake message") fakeHash := sha256.Sum256(fakeMessage) // Проверяем подпись для измененного сообщения err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, fakeHash[:], signature) if err != nil { fmt.Println("Подпись неверна:", err) } else { fmt.Println("Подпись верна") } }

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

"Подпись неверна: crypto/rsa: verification error"

Пример

Давайте проверим подпись с использованием хеша SHA-512:

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha512" "fmt" ) func main() { // Генерируем ключевую пару privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println(err) return } publicKey := &privateKey.PublicKey // Сообщение для подписи message := []byte("Important document") // Вычисляем хеш SHA-512 hash := sha512.Sum512(message) // Создаем подпись signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA512, hash[:]) if err != nil { fmt.Println(err) return } // Проверяем подпись err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA512, hash[:], signature) if err != nil { fmt.Println("Подпись неверна:", err) return } fmt.Println("Подпись верна") }

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

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

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

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