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

Функция rsa.EncryptPKCS1v15

Функция rsa.EncryptPKCS1v15 шифрует переданное сообщение с использованием открытого ключа RSA и схемы заполнения PKCS#1 v1.5. Первым параметром функция принимает криптографически безопасный генератор случайных чисел (обычно rand.Reader), вторым параметром - открытый ключ типа *rsa.PublicKey, третьим - байтовый срез с данными для шифрования. Функция возвращает зашифрованный байтовый срез и ошибку, если шифрование не удалось.

Синтаксис

ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, pubKey, msg)

Пример

Давайте зашифруем сообщение "hello world" с использованием сгенерированного открытого ключа RSA:

package main import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "fmt" ) func main() { // Генерируем пару ключей RSA privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } publicKey := &privateKey.PublicKey // Сообщение для шифрования msg := []byte("hello world") // Шифруем сообщение ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, msg) if err != nil { panic(err) } fmt.Printf("%x", ciphertext) }

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

"4c6f8a9b1e2d3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a"

Пример

Давайте зашифруем сообщение "secret data" и расшифруем его с помощью закрытого ключа:

package main import ( "crypto/rand" "crypto/rsa" "fmt" ) func main() { // Генерируем пару ключей RSA privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } publicKey := &privateKey.PublicKey // Сообщение для шифрования msg := []byte("secret data") // Шифруем сообщение ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, msg) if err != nil { panic(err) } // Расшифровываем сообщение decrypted, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, ciphertext) if err != nil { panic(err) } fmt.Printf("Decrypted: %s", decrypted) }

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

"Decrypted: secret data"

Пример

Обработка ошибки при попытке зашифровать слишком длинное сообщение (максимальная длина зависит от размера ключа):

package main import ( "crypto/rand" "crypto/rsa" "fmt" ) func main() { // Генерируем пару ключей RSA privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } publicKey := &privateKey.PublicKey // Создаем слишком длинное сообщение msg := make([]byte, 300) // Пытаемся зашифровать _, err = rsa.EncryptPKCS1v15(rand.Reader, publicKey, msg) if err != nil { fmt.Println(err) } }

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

"crypto/rsa: message too long for RSA key size"

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

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