У меня есть приложение, которое хранит ключи ssh. Пользователь записывает свой закрытый и открытый ключ в 2 текстовых поля, и перед их сохранением мое приложение должно проверить, совпадает ли закрытый ключ с открытым ключом (с использованием pycrypto). Проверка пары RSA было достаточно легко:Проверка пары ключей DSA с pycrypto (получение значений pqg)
message = 'Encrypted message'
if 'ssh-rsa' in public_key:
public_key_container = RSA.importKey(public_key)
private_key_container = RSA.importKey(private_key)
encrypted_message = public_key_container.encrypt(message, 0)
decrypted_message = private_key_container.decrypt(encrypted_message)
if message == decrypted_message:
return True
Я нашел код, который, кажется, чтобы проверить пару ключей DSA, но я не могу найти, как извлечь значения PQG из пользователей государственного и частного ключа:
elif 'ssh-dss' in public_key:
q = "?"
p = "?"
g = "?"
pub_k = ""
for b in bytearray(public_key, 'utf-8'):
pub_k += str(b)
priv_k = ""
for b in bytearray(private_key, 'utf-8'):
priv_k += str(b)
params = (long(pub_k), long(g), long(p), long(q), long(priv_k))
key = DSA.construct(params)
if key.verify(message, key.sign(message,3)):
return True
Пожалуйста, не заставляйте меня генерировать открытый ключ из закрытого ключа, используя такую функцию, как ssh-keygen. Я знаю этот метод, я хочу сделать это с помощью pycrypto.
Это одна кажется очень хорошо! Теперь мне нужно найти эту функцию b (char) ... –
Это работает как шарм для открытого ключа, но я просто не могу понять, как заставить его работать для частного. Должны ли эти два быть в одной строке/переменной? –
Строка 'ssh-dss' содержит только открытый ключ. Закрытый ключ DSA обычно находится в отдельном файле PEM. Это то, что ваши пользователи будут копировать и вставлять? Этот формат совершенно другой (и он также может быть зашифрован паролем). Текущая основная ветвь содержит код для этого. – SquareRootOfTwentyThree