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

Функция rsa.DecryptOAEP

Функция rsa.DecryptOAEP выполняет расшифровку данных, которые были зашифрованы с использованием алгоритма RSA и схемы дополнения OAEP. В первый параметр передается хеш-функция, которая используется для вычисления хешей в рамках схемы OAEP. Во второй параметр передается источник случайных данных (обычно rand.Reader). В третий параметр передается приватный ключ для расшифровки. В четвертый параметр передаются зашифрованные данные. В пятый параметр передается метка (label), которая использовалась при шифровании (может быть пустой строкой).

Синтаксис

rsa.DecryptOAEP(hash hash.Hash, random io.Reader, priv *rsa.PrivateKey, ciphertext []byte, label []byte) ([]byte, error)

Базовый пример расшифровки

Давайте расшифруем данные, которые были зашифрованы с помощью функции rsa.EncryptOAEP:

package main import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println("Error generating key:", err) return } message := []byte("secret message") label := []byte("") ciphertext, err := rsa.EncryptOAEP( sha256.New(), rand.Reader, &privateKey.PublicKey, message, label, ) if err != nil { fmt.Println("Error encrypting:", err) return } plaintext, err := rsa.DecryptOAEP( sha256.New(), rand.Reader, privateKey, ciphertext, label, ) if err != nil { fmt.Println("Error decrypting:", err) return } fmt.Println(string(plaintext)) }

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

"secret message"

Пример с использованием метки

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

package main import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println("Error generating key:", err) return } message := []byte("confidential data") label := []byte("top-secret") ciphertext, err := rsa.EncryptOAEP( sha256.New(), rand.Reader, &privateKey.PublicKey, message, label, ) if err != nil { fmt.Println("Error encrypting:", err) return } plaintext, err := rsa.DecryptOAEP( sha256.New(), rand.Reader, privateKey, ciphertext, label, ) if err != nil { fmt.Println("Error decrypting:", err) return } fmt.Println(string(plaintext)) }

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

"confidential data"

Обработка ошибки при неверной метке

При расшифровке данных с неверной меткой возникает ошибка:

package main import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println("Error generating key:", err) return } message := []byte("important data") labelCorrect := []byte("correct-label") labelWrong := []byte("wrong-label") ciphertext, err := rsa.EncryptOAEP( sha256.New(), rand.Reader, &privateKey.PublicKey, message, labelCorrect, ) if err != nil { fmt.Println("Error encrypting:", err) return } plaintext, err := rsa.DecryptOAEP( sha256.New(), rand.Reader, privateKey, ciphertext, labelWrong, ) if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(plaintext)) }

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

"Error: crypto/rsa: decryption error"

Расшифровка с использованием различных хешей

Функция rsa.DecryptOAEP может использовать разные хеши, например sha512.New:

package main import ( "crypto/rand" "crypto/rsa" "crypto/sha512" "fmt" ) func main() { privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { fmt.Println("Error generating key:", err) return } message := []byte("secure data with SHA512") label := []byte("") ciphertext, err := rsa.EncryptOAEP( sha512.New(), rand.Reader, &privateKey.PublicKey, message, label, ) if err != nil { fmt.Println("Error encrypting:", err) return } plaintext, err := rsa.DecryptOAEP( sha512.New(), rand.Reader, privateKey, ciphertext, label, ) if err != nil { fmt.Println("Error decrypting:", err) return } fmt.Println(string(plaintext)) }

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

"secure data with SHA512"

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

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