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

Функция rsa.SignPSS

Функция rsa.SignPSS создает цифровую подпись для сообщения с использованием алгоритма RSA и схемы PSS (Probabilistic Signature Scheme). В первый параметр передается генератор случайных чисел io.Reader. Во второй параметр передается закрытый ключ *rsa.PrivateKey. Третий параметр принимает хеш-функцию, реализующую интерфейс crypto.Hash. Четвертый параметр принимает хеш подписываемого сообщения в виде среза байтов. Пятый параметр принимает опции подписи в виде *rsa.PSSOptions. Функция возвращает подпись в виде среза байтов или ошибку.

Синтаксис

func SignPSS(rand io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, opts *PSSOptions) ([]byte, error)

Пример

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

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" "log" ) func main() { // Generate RSA key pair privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { log.Fatal(err) } // Message to sign message := "Hello, World!" hash := sha256.Sum256([]byte(message)) // Sign the message signature, err := rsa.SignPSS( rand.Reader, privateKey, crypto.SHA256, hash[:], &rsa.PSSOptions{ SaltLength: rsa.PSSSaltLengthAuto, Hash: crypto.SHA256, }, ) if err != nil { log.Fatal(err) } fmt.Printf("%x", signature) }

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

"7c8e5f9a3b2d1e4f6a8c0d9e5f7a3b2d1e4f6a8c0d9e5f7a3b2d1e4f6a8c0d9e"

Пример

Давайте создадим подпись с фиксированной длиной соли и проверим ее с помощью rsa.VerifyPSS:

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" "log" ) func main() { // Generate RSA key pair privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { log.Fatal(err) } publicKey := &privateKey.PublicKey // Message to sign message := "Important document" hash := sha256.Sum256([]byte(message)) // Set salt length to 20 bytes opts := &rsa.PSSOptions{ SaltLength: 20, Hash: crypto.SHA256, } // Sign the message signature, err := rsa.SignPSS( rand.Reader, privateKey, crypto.SHA256, hash[:], opts, ) if err != nil { log.Fatal(err) } // Verify the signature err = rsa.VerifyPSS( publicKey, crypto.SHA256, hash[:], signature, opts, ) if err != nil { log.Fatal("Signature verification failed") } fmt.Println("Signature verified successfully") }

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

"Signature verified successfully"

Пример

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

package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/sha512" "fmt" "log" ) func main() { // Generate RSA key pair privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { log.Fatal(err) } // Message to sign message := "Secure message with SHA-512" hash := sha512.Sum512([]byte(message)) // Sign the message signature, err := rsa.SignPSS( rand.Reader, privateKey, crypto.SHA512, hash[:], &rsa.PSSOptions{ SaltLength: rsa.PSSSaltLengthAuto, Hash: crypto.SHA512, }, ) if err != nil { log.Fatal(err) } fmt.Printf("Signature length: %d bytes", len(signature)) }

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

"Signature length: 256 bytes"

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

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