2016-07-05 3 views
0

Я пытаюсь сделать программу, которая использует шифрование RSA для шифрования и дешифрования данных, отправленных на и с нескольких компьютеров. У меня есть папка, в которой хранятся открытые ключи других компьютеров, на моем компьютере. Однако я не могу загрузить этот ключевой файл и создать объект publicKey, который указывает на него. Моя текущая попытка показана ниже, но мне было интересно, какие методы используют другие люди для этого?Как вы шифруете данные с помощью ключевого файла в java?

 //Returns the key of a friend (given as input) 

    public PublicKey getFriendsKey(String friend){ 
    try{ObjectInputStream friendsKeyInput = new ObjectInputStream(new fileInputStream(programLocation + "/Text Files/encryptionKeys/" + friend + "PublicKey.key")); 
    PublicKey friendsKey = friendsKeyInput.readObject(); 
    } 
    catch(Exception e){e.printStackTrace();} 
    return friendsKey; 
    } 
+0

Понимаете ли вы, что длина данных ограничена длиной ключа и в 100-1000 раз медленнее симметричного шифра? Эти данные обычно шифруются с помощью симметричного алгоритма, такого как AES? – zaph

+0

@zaph: фактически длина ключа минус не менее 11 октетов для заполнения/рандомизации, хотя теперь эти ключи в основном (требуется) не менее 2048 бит = 256-октет, что относительно менее важно. OP: расскажите нам, как были сгенерированы файлы и/или отправили образец файла (или несколько, если они не все одинаковы); если не текст, используйте шестнадцатеричные дампы. –

+0

@ dave_thompson_085 Я знаю, но для того, чтобы избежать аргументов (я потерпел неудачу здесь), я тщательно изложил «ограниченную длину ключа», которая истинна. Если я учитываю прокладку, я получил захлопнув из-за необработанных данных. В контексте моего комментария я хочу указать, что существует ограничение на размер данных для асимметричного шифрования, и это казалось актуальным, поскольку файлы состояний OP, которые могут быть больше, чем размер ключа - заполнение - независимо от того, что я не хотел проблема заполнения. – zaph

ответ

0

Почему вы используете ObjectInputStream? Скорее всего, ваш ключ не является serializable java object. См. Этот ответ. Load RSA public key from file

+0

# 11410070 охватывает SPKI (что Java вызывает X509EncodedKey) и, возможно, _some_ другой PEM с использованием BC, но не полный сертификат X509 (или даже содержащий сертификат PKCS7), или формат публикации OpenSSH, который сильно отличается или (Open) PGP formatick, который очень разные или различные форматы двухзначного числа. –