Хорошо, эта версия работает с двумя новыми объектами Карты и двумя повторениями и видами на значениях. Надежда, выполнять хорошо, хотя записи карты должны быть циклично выполнены дважды:
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
Нет. Это не так, как работает шифрование с открытым / закрытым ключом. Вы можете зашифровать только открытым ключом и расшифровать только закрытым ключом.
Если вы хотите применить закрытый ключ к сообщению, возможно, вам нужна подпись , а не шифрование ? Это другая криптографическая схема, которая также может использовать ключи RSA.
Чтобы немного прояснить ситуацию:
RSA можно использовать либо для шифрования (гарантируя, что Ева не может читать сообщения, которые Алиса отправляет Бобу), либо для подписи (гарантируя, что если Алиса отправляет сообщение Бобу, Боб знает, что на самом деле это Алиса отправила сообщение, а не Ева, притворяющаяся Алисой)
RSA генерирует пару ключей - открытый ключ и закрытый ключ. RSA разработан таким образом, что если вы примените открытый ключ, а затем примените закрытый ключ, или наоборот, вы получите то же сообщение обратно. Открытый ключ может быть получен из закрытого ключа, но обратное невозможно.
Чтобы использовать RSA для шифрования, Алиса шифрует сообщение, используя открытый ключ Боба. Единственный способ прочитать это сообщение - использовать закрытый ключ Боба, который есть только у него. Таким образом, Ева не может прочитать сообщение, потому что у него нет этого ключа. С другой стороны, это не обеспечивает аутентификации источника сообщения. Ева также может получить открытый ключ Боба (поскольку он открыт) и отправить сообщение Бобу, выдавая себя за Алису.
Чтобы использовать RSA для подписи, Алиса берет хэш сообщения, шифрует хеш, используя свой собственный закрытый ключ, и добавляет результат (это подпись) к сообщению. Ева, конечно, все еще может расшифровать это, используя открытый ключ Алисы. Однако Боб может расшифровать подпись, используя открытый ключ Алисы, и посмотреть, совпадает ли она. Если это так, то он, должно быть, был зашифрован с использованием закрытого ключа Алисы, который есть только у нее, поэтому он, должно быть, пришел от Алисы.
Я не знаком с API криптографии .NET, поэтому я не уверен если он работает точно так, как описано здесь. Но это объяснение может помочь вам понять некоторые ответы, которые вы получаете.
м не уверен, работает ли он именно так, как описано здесь. Но это объяснение может помочь вам понять некоторые ответы, которые вы получаете. м не уверен, работает ли он именно так, как описано здесь. Но это объяснение может помочь вам понять некоторые ответы, которые вы получаете.Выполнение необработанной операции RSA с закрытым ключом обычно называется операцией дешифрования (точно так же, как выполнение операции с открытым ключом называется операцией шифрования).
Полезно иметь доступ к этой операции - например, для реализации операции, которая не поддерживается платформой.
Операция существует: это метод DecryptValue , который определяется базовым классом RSACryptoServiceProvider: System.Security.Cryptography.RSA . К сожалению, он не поддерживается RSACryptoServiceProvider (поскольку базовый win32-api, CryptoAPI, не поддерживает его). Однако если бы вы могли получить другую .NET-реализацию RSA-класса, вы бы смогли это сделать.
К счастью, нет. Однако вы можете подписать закрытым ключом и проверить подпись открытым ключом.
Хотя математика имеет смысл, когда ключевые роли меняются местами (и именно так работают подписи), шифрование для обеспечения конфиденциальности не имеет большого смысла когда ключ дешифрования хорошо известен и общедоступен.
Безопасность криптосистемы с открытым ключом основаны на том факте, что функция sign () / encrypt () является односторонней функцией в том смысле, что для ее расшифровки без открытого ключа "лазейка" потребуется невероятное количество времени. ".
Кроме того, обычно генерируемые ключи имеют разную длину, хотя могут быть. Есть много статей об асимметричной длине ключа с RSA.