Действительно ли возможно зашифровать с использованием закрытого ключа .net RSACryptoServiceProvider?

Хорошо, эта версия работает с двумя новыми объектами Карты и двумя повторениями и видами на значениях. Надежда, выполнять хорошо, хотя записи карты должны быть циклично выполнены дважды:

public static void main(String[] args) {
    Map<String, String> unsorted = new HashMap<String, String>();
    unsorted.put("Cde", "Cde_Value");
    unsorted.put("Abc", "Abc_Value");
    unsorted.put("Bcd", "Bcd_Value");

    Comparator<String> comparer = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareTo(o2);
        }};

    System.out.println(sortByValue(unsorted, comparer));

}

public static <K, V> Map<K,V> sortByValue(Map<K, V> in, Comparator<? super V> compare) {
    Map<V, K> swapped = new TreeMap<V, K>(compare);
    for(Entry<K,V> entry: in.entrySet()) {
        if (entry.getValue() != null) {
            swapped.put(entry.getValue(), entry.getKey());
        }
    }
    LinkedHashMap<K, V> result = new LinkedHashMap<K, V>();
    for(Entry<V,K> entry: swapped.entrySet()) {
        if (entry.getValue() != null) {
            result.put(entry.getValue(), entry.getKey());
        }
    }
    return result;
}

решение использует TreeMap с Компаратором и разбирается во всех пустых ключах и значениях. Во-первых, функциональность упорядочивания от TreeMap привыкла к виду на значения, затем отсортированная Карта используется для создания результата как LinkedHashMap, который сохраняет, имеет тот же порядок значений.

Greetz, GHad

18
задан Eugene Podskal 2 July 2014 в 07:31
поделиться

5 ответов

Нет. Это не так, как работает шифрование с открытым / закрытым ключом. Вы можете зашифровать только открытым ключом и расшифровать только закрытым ключом.

Если вы хотите применить закрытый ключ к сообщению, возможно, вам нужна подпись , а не шифрование ? Это другая криптографическая схема, которая также может использовать ключи RSA.

-2
ответ дан 30 November 2019 в 05:39
поделиться

Чтобы немного прояснить ситуацию:

RSA можно использовать либо для шифрования (гарантируя, что Ева не может читать сообщения, которые Алиса отправляет Бобу), либо для подписи (гарантируя, что если Алиса отправляет сообщение Бобу, Боб знает, что на самом деле это Алиса отправила сообщение, а не Ева, притворяющаяся Алисой)

RSA генерирует пару ключей - открытый ключ и закрытый ключ. RSA разработан таким образом, что если вы примените открытый ключ, а затем примените закрытый ключ, или наоборот, вы получите то же сообщение обратно. Открытый ключ может быть получен из закрытого ключа, но обратное невозможно.

Чтобы использовать RSA для шифрования, Алиса шифрует сообщение, используя открытый ключ Боба. Единственный способ прочитать это сообщение - использовать закрытый ключ Боба, который есть только у него. Таким образом, Ева не может прочитать сообщение, потому что у него нет этого ключа. С другой стороны, это не обеспечивает аутентификации источника сообщения. Ева также может получить открытый ключ Боба (поскольку он открыт) и отправить сообщение Бобу, выдавая себя за Алису.

Чтобы использовать RSA для подписи, Алиса берет хэш сообщения, шифрует хеш, используя свой собственный закрытый ключ, и добавляет результат (это подпись) к сообщению. Ева, конечно, все еще может расшифровать это, используя открытый ключ Алисы. Однако Боб может расшифровать подпись, используя открытый ключ Алисы, и посмотреть, совпадает ли она. Если это так, то он, должно быть, был зашифрован с использованием закрытого ключа Алисы, который есть только у нее, поэтому он, должно быть, пришел от Алисы.


Я не знаком с API криптографии .NET, поэтому я не уверен если он работает точно так, как описано здесь. Но это объяснение может помочь вам понять некоторые ответы, которые вы получаете.

м не уверен, работает ли он именно так, как описано здесь. Но это объяснение может помочь вам понять некоторые ответы, которые вы получаете.

м не уверен, работает ли он именно так, как описано здесь. Но это объяснение может помочь вам понять некоторые ответы, которые вы получаете.

62
ответ дан 30 November 2019 в 05:39
поделиться

Выполнение необработанной операции RSA с закрытым ключом обычно называется операцией дешифрования (точно так же, как выполнение операции с открытым ключом называется операцией шифрования).

Полезно иметь доступ к этой операции - например, для реализации операции, которая не поддерживается платформой.

Операция существует: это метод DecryptValue , который определяется базовым классом RSACryptoServiceProvider: System.Security.Cryptography.RSA . К сожалению, он не поддерживается RSACryptoServiceProvider (поскольку базовый win32-api, CryptoAPI, не поддерживает его). Однако если бы вы могли получить другую .NET-реализацию RSA-класса, вы бы смогли это сделать.

6
ответ дан 30 November 2019 в 05:39
поделиться

К счастью, нет. Однако вы можете подписать закрытым ключом и проверить подпись открытым ключом.

Хотя математика имеет смысл, когда ключевые роли меняются местами (и именно так работают подписи), шифрование для обеспечения конфиденциальности не имеет большого смысла когда ключ дешифрования хорошо известен и общедоступен.

5
ответ дан 30 November 2019 в 05:39
поделиться

Безопасность криптосистемы с открытым ключом основаны на том факте, что функция sign () / encrypt () является односторонней функцией в том смысле, что для ее расшифровки без открытого ключа "лазейка" потребуется невероятное количество времени. ".

Кроме того, обычно генерируемые ключи имеют разную длину, хотя могут быть. Есть много статей об асимметричной длине ключа с RSA.

-1
ответ дан 30 November 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: