Функция 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-ключей для подписи и шифрования