Was sind die Hauptunterschiede zwischen RSAPublicKey
und PublicKey
in Java? Auch ich stelle die gleiche Frage für die RSAPrivateKey
und PrivateKey
.Was sind die Unterschiede zwischen PublicKey/PrivateKey und RSAPublicKey/RSAPrivateKey?
Antwort
PublicKey
/PrivateKey
sind Schlüssel für einen Algorithmus, der ein Schlüsselpaar verwendet, ohne anzugeben, was der Algorithmus ist.
Ihre RSA-verwandten Gegenstücke sind ihre Spezialisierungen für RSA-Algorithmus. Zum Beispiel hat RSAPublicKey
getPublicExponent()
Methode fehlt in PublicKey
. In der Praxis können Sie diese Regel verwenden: Wenn Sie sicher sind, dass Sie nur RSA verwenden, verwenden Sie RSAPublicKey
/RSAPrivateKey
; Andernfalls verwenden Sie PublicKey
/PrivateKey
.
Instanzen von Klassen wie Cipher
und Signature
wird jede PublicKey
oder PrivateKey
Instanz für ihre Initialisierungsmethoden während der Kompilierung der Regel akzeptieren. Der Schlüsseltyp sollte jedoch dem implementierten Algorithmus entsprechen. Dies wird zur Laufzeit überprüft, was zu einem InvalidKeyException
führt, wenn der Schlüssel und der Algorithmus nicht übereinstimmen.
Dies ermöglicht den einfachen Wechsel zwischen Algorithmen, auch während der Laufzeit, wenn dies erforderlich ist. Daher kann der größte Teil des Codes unabhängig vom verwendeten Algorithmus implementiert werden, zumindest solange, bis Schlüsseltyp-spezifische Operationen erforderlich sind.
Beachten Sie, dass RSAPublicKey
erstreckt PublicKey
und dass beide Java-Schnittstellen. In der Regel sollten Sie selbst nur RSAPublicKey
verwenden, wenn Sie die zusätzlichen Möglichkeiten der Schnittstelle benötigen. Dies sollte nicht oft der Fall sein; für die kryptografischen Operationen reicht normalerweise die PublicKey
aus.
Manchmal benötigen Sie jedoch weitere Informationen wie die Schlüsselgröße (Modulgröße im Fall von RSA) oder codieren die Schlüssel anders als die Standardcodierung bereitstellt. In diesem Fall müssen Sie die Schnittstellen der höheren Ebene direkt verwenden.
Die KeyFactory
und KeyPairGenerator
Factory-Klassen einfach Ausgang PublicKey
oder PrivateKey
, letztere indirekt durch eine allgemeine KeyPair
Instanz ausgibt. Wenn Sie die zusätzlichen Methoden benötigen Sie müssen daher Guss der öffentliche Schlüssel zu einem öffentlichen RSA-Schlüssel:
RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey;
Wenn Sie jedoch nicht sicher sind, welche Art von Schlüssel Sie erhalten müssen Sie zunächst überprüfen, ob der Typ Korrektur mit instanceof
:
if (publicKey instanceof RSAPublicKey) {
RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey;
}
oder Sie sollten die ClassCastException
, die folgen könnten zu fangen bereit sein.
Kryptografieanbieter, implementiert gemäß der Java Cryptography Architecture, bieten die tatsächliche Implementierung dieser Schnittstellen.
Dies erklärt, eine weitere Nutzung dieser Schnittstellen: solange die zugrunde liegenden kryptographisches Material wie das Modul und den Exponenten kann es einen Schlüssel oder Schlüsselpaar mit einem Anbieter und es in einem anderen Anbieter verwenden, um erstellen möglich abgerufen werden . Dies wäre nicht möglich, wenn die Schnittstelle zum Abrufen des Moduls und des Exponenten nicht standardisiert wäre.
Hardwarebasierte Anbieter (Smartcards, HSMs) lösen normalerweise eine Ausnahme aus, wenn Sie versuchen, den privaten Exponenten oder anderes privates Schlüsselmaterial abzurufen. Dies liegt daran, dass der Schlüssel das Hardwaregerät im Allgemeinen nicht verlässt; Sie können die RSA-Vorgänge nur auf dem Gerät selbst ausführen, indem Sie den angegebenen Anbieter verwenden.
Es ist nicht möglich, diese Schlüssel in anderen Cipher
Implementierungen zu verwenden. Java enthält daher eine "verzögerte Providerauswahl", um sicherzustellen, dass der richtige Provider ausgewählt wird, wenn er nicht explizit bei der Instanziierung angegeben wurde, zum Beispiel - Cipher.getInstance(String algorithm)
. Stattdessen wird der Provider während der Initialisierung ausgewählt.
RSAPrivateCrtKey
ist eine Schnittstelle, die RSAPrivateKey
erstreckt sich wieder. Diese Klasse enthält Zugriff auf die Parameter, die erforderlich sind, um schnellere Berechnungen durchzuführen, die das chinesische Resttheorem (CRT) verwenden. Im Allgemeinen müssten Sie diese Parameter auch nicht aufrufen.
- 1. Was sind die Unterschiede zwischen zweien?
- 2. Was sind die Unterschiede zwischen Karma Reportern?
- 3. Was sind die Unterschiede zwischen & und &&, | und || in R?
- 4. Was sind die Unterschiede zwischen PECL und PEAR?
- 5. Was sind die Unterschiede zwischen Active Record und Repository-Muster?
- 6. Graph - Was sind die Unterschiede zwischen eingebetteten und topologischen Graphen?
- 7. Was sind die Unterschiede zwischen C und C++ Aufrufkonventionen?
- 8. Was sind die Unterschiede zwischen Vanille Perl und Strawberry Perl?
- 9. Was sind die Unterschiede zwischen LDAP und Active Directory?
- 10. Was sind die Unterschiede zwischen WCF und traditionellen ASP.NET Web
- 11. Was sind die Unterschiede zwischen Gleitern und Programmierern?
- 12. Was sind die Unterschiede zwischen to.equal (true) und to.be.true?
- 13. Was sind die Unterschiede zwischen Würfen und Wiederholungen in Swift?
- 14. Was sind die Unterschiede zwischen WebAPI und WebAPI 2
- 15. Was sind die Unterschiede zwischen HasOne und Referenzen in Nhibernate?
- 16. Was sind die Unterschiede zwischen .pem, .cer und .der?
- 17. Was sind die größten Unterschiede zwischen fopen und curl?
- 18. Was sind die Unterschiede zwischen LLVM und Java-Bytecode?
- 19. Was sind die praktischen Unterschiede zwischen Fliegengewicht und Singleton-Mustern?
- 20. Was sind die Unterschiede zwischen flex mxml und actionscript-3?
- 21. Was sind die Unterschiede zwischen ADOdb und PDO in PHP?
- 22. Was sind die Unterschiede zwischen WebServiceBinding.EmitConformanceClaims und WebServiceBinding.ConformanceClaims?
- 23. Was sind die Unterschiede in JIT zwischen Java und. NET
- 24. Was sind die Unterschiede zwischen Pause und Ausfahrt?
- 25. Was sind die Unterschiede zwischen R.styleable, R.style und R.attr?
- 26. Was sind die Unterschiede zwischen struct_time und datetime?
- 27. Was sind die Unterschiede zwischen Layern und erweiterbaren Effekten?
- 28. Was sind die Unterschiede zwischen ConcurrentQueue und BlockingCollection in .Net?
- 29. Was sind die Unterschiede zwischen Entweder und Option?
- 30. Was sind die Unterschiede zwischen Kappa-Architektur und Lambda-Architektur
Entschuldigung, ich wollte die fehlenden Informationen zu Ihrer Antwort hinzufügen, aber es passte nicht, wie Sie aus meiner eigenen Antwort sehen können. Ich habe deine Antwort natürlich aufgefrischt - diese Frage kann eine schöne und kompakte Antwort wie diese und eine erweiterte verwenden :) –
Kein Problem überhaupt :) –