Как зашифровать с помощью закрытого ключа RSA, считанного из файла PEM, с помощью языка программирования Go?

Как мне сделать эквивалент следующего кода C++ в go?

RSA *key = PEM_read_RSAPrivateKey(f, NULL, NULL, NULL);
std::vector<CK_BYTE> out(128);
RSA_private_encrypt(in.size(), &in[0], &out[0], key, RSA_PKCS1_PADDING)

Я просмотрел пакет Go rsa. Похоже, EncryptPKCS1v15() может быть эквивалентом RSA_private_encrypt(). Но я не вижу, как создать объект PrivateKey, кроме как с помощью GenerateKey(), который (можно подтвердить, просмотрев источник) генерирует его, используя случайные простые числа.

Нужно ли мне выяснять, как декодировать файл PEM, чтобы вытащить значения полей PrivateKey?

Обновление. Эквивалент приведенного выше кода C++ в Python:

from M2Crypto import RSA
rsa_private_key = RSA.load_key('privkey.pem')
encrypted = rsa_private_key.private_encrypt(digest, RSA.pkcs1_padding)

Существует ли эквивалент в Go?


person Daryl Spitzer    schedule 24.06.2010    source источник


Ответы (2)


Эквивалентная функция выглядит так: SignPKCS1v15. Функция ParsePKCS1PrivateKey в crypto/x509 кажется наиболее близким к тому, что вам нужно прочитать в вашем существующем закрытом ключе, но я не уверен, что формат PEM точно совместим, что должно быть для этого, чтобы работать.

person President James K. Polk    schedule 24.06.2010
comment
Пакет encoding/pem можно использовать для декодирования файлов PEM в подходящий формат. - person brennie; 15.07.2011

Я думаю, вы ищете crypto/tls, а не crypto/rsa.

Я не уверен на 100%, что вы пытаетесь здесь сделать, но пакет tls имеет некоторые функции для чтения файлов PEM.

person cthom06    schedule 24.06.2010
comment
Я не подумал заглянуть в пакет cryto/tls. Все, что я вижу, это SetFromPEM(), но его источник привел меня к пакету encoding/pem. Это может помочь мне свернуть мою собственную функцию PEM_read_RSAPrivateKey. - person Daryl Spitzer; 24.06.2010