Наконец, я нашел, как преобразовать открытый ключ OpenSSH в формат PEM в блоге и смог успешно зашифровать и расшифровать строку, используя мой закрытый / открытый ключ.
Я обрисовал в общих чертах шаги, которые я использовал, чтобы выполнить шифрование и дешифрование.
Чтобы зашифровать строку:
# convert public key to PEM format
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m PKCS8 > ~/.ssh/id_rsa.pub.pem
# encrypt string using public key
echo "String to Encrypt" \
| openssl rsautl -pubin -inkey ~/.ssh/id_rsa.pub.pem -encrypt -pkcs \
| openssl enc -base64 \
> string.txt
Чтобы расшифровать строку (из файла):
openssl enc -base64 -d -in string.txt \
| openssl rsautl -inkey ~/.ssh/id_rsa -decrypt
Так как моя цель - отправить пароль по электронной почте, я написал очень простой скрипт, чтобы немного автоматизировать процесс:
#!/bin/sh
if test "x${1}" == "x";then
echo "Usage: ${0} <username>"
exit 1
fi
SSHUSER=${1}
printf "Enter Password: "
read PASS1
echo ""
echo ""
ssh-keygen -f /home/${SSHUSER}/.ssh/id_rsa.pub -e -m PKCS8 \
> /tmp/ssh-pubkey-${SSHUSER}.pem
echo 'cat << EOF |openssl enc -base64 -d |openssl rsautl -inkey ~/.ssh/id_rsa -decrypt'
echo "New Password: ${PASS1}" \
| openssl rsautl -pubin -inkey /tmp/ssh-pubkey-${SSHUSER}.pem -encrypt -pkcs \
| openssl enc -base64
echo "EOF"
echo ""
rm -f /tmp/ssh-pubkey-${SSHUSER}.pem
Затем я могу отправить выходные данные сценария по электронной почте для расшифровки пользователем.
Полный скрипт доступен на Github: https://gist.github.com/3078682
В общем, да, это возможно. Все, что делает SHH - это генерирует модуль N и два ключа e (открытый ключ) и d (закрытый). Используемый механизм обычно является RSA или DSA, и сгенерированные ключи могут использоваться для шифрования. Все, что вам нужно сделать, это извлечь их из BLOB-объекта base64, который является открытым ключом, а затем использовать подходящую программу для шифрования данных этими ключами. Возможно, вас заинтересует Monkeysphere, которая может переключаться между форматом ключей ssh и ключами gnupg. Это должно позволить вам также использовать ключи для шифрования.
источник
Обычно никто не выполняет «массовое шифрование» с ассиметричными ключами. Но это не имеет значения, поскольку вы не должны иметь дело с таким уровнем детализации. Используйте инструментарий (openssl отлично подходит http://www.openssl.org/docs/apps/openssl.html ), чтобы выполнить эту работу за вас. Что вы хотите сделать, это создать зашифрованное сообщение, содержащее новый временный пароль и указать пару ключей пользователя в качестве получателя. Примеры изобилуют на этой странице: http://www.openssl.org/docs/apps/smime.html
источник