In diesem Artikel wird hauptsächlich die häufig verwendeten Verschlüsselungsalgorithmen für die Java -Implementierung vorgestellt - Einwegverschlüsselungsalgorithmen MD5 und SHA wie folgt:
1. Javas Sicherheitsarchitektur
1.1 Einführung in die Sicherheitsarchitektur von Java
Stellen Sie Klassen und Schnittstellen für Sicherheitsrahmen in Java zur Verfügung. Die JDK -Sicherheits -API ist die Kern -API der Java -Programmiersprache, die sich im Java.Security -Paket (und ihren Unterpackungen) sowie das Sun.SecurityAPI -Paket (und ihre Unterpackungen) befindet. Entwickelt, um Entwicklern dabei zu helfen, sowohl niedrige als auch fortschrittliche Sicherheitsfunktionen in ihren Programmen zu verwenden.
In der ersten Veröffentlichung von JDK in JDK 1.1 wurde die "Java -Verschlüsselungsarchitektur" (JCA) eingeführt, die sich auf die Architektur bezieht, die zum Zugriff auf und entwickelt Java -Plattformkennwortfunktionen. In JDK 1.1 enthält JCA eine API für digitale Signaturen und Nachrichtenverdauungen. JDK 1.2 erweitert die Java-Verschlüsselungsarchitektur erheblich, aktualisiert die Infrastruktur für das Zertifikatmanagement auf die Unterstützung von X.509 V3-Zertifikaten und führt eine neue Java-Sicherheitsarchitektur für feinkörnige, konfigurierbare, flexible und erweiterbare Zugangskontrolle vor.
Die Java-Verschlüsselungsarchitektur enthält die passwortbezogenen Teile der JDK 1.2-Sicherheits-API sowie eine Reihe von Konventionen und Spezifikationen in diesem Dokument. Um mehrere interoperable Passwörter zu implementieren, bietet es auch eine "Anbieter" -Architektur.
Java -Passwort -Erweiterung (JCE)) erweitert die JCA -API, einschließlich APIs für Verschlüsselungs-, Schlüsselaustausch- und Informationsauthentifizierungscodes (MAC). JCE- und JDK -Passwörter gemeinsam bieten eine vollständige Kennwort -API, die nicht mit der Plattform zusammenhängt. JCE als Erweiterung von JDK wird unabhängig voneinander freigegeben, um die Einschränkungen der US -Exportkontrollbeschränkungen einzuhalten.
1.2 Verwandter Quellcode von JDK in Eclipse
Um ein tieferes Verständnis der Implementierung der Einwegverschlüsselungsalgorithmen MD5 und SHA in Java zu haben, kann der Quellcode des JDK mit der Verwendung der Eclipse-IDE zugeordnet werden (der Autor verwendet JDK6.0).
Nach Abschluss der Installation von JDK6.0 befindet sich das Verzeichnis src.zip im Stammverzeichnis von JDK (z. B. C: /java/jdk1.6.0_21). Dieses Verzeichnis kann in ein anderes Verzeichnis dekomprimiert werden (z. B. D:/Amigo/Study/Technical Essay/201405). src.zip enthält nicht alle JDK -Quellcode. Beispielsweise existieren die Unterpackungen unter der Sonne in src.zip nicht (z. B. das in diesem Artikel verwendete Sun.Security -Paket und seine Unterhöfe sind nicht enthalten).
Um diese Unterpackungen herunterzuladen, müssen Sie den Quellcode von OpenJDK herunterladen. OpenJDK ist die Open -Source -Version von JDK und wird in Form des GPL -Protokolls veröffentlicht. Bei JDK7 war OpenJDK die Backbone -Entwicklung von JDK7 geworden. Sun Jdk7 wurde auf der Grundlage von OpenJDK7 freigelassen. Die meisten seiner ursprünglichen Codes sind gleich und nur ein kleiner Teil der ursprünglichen Codes wurden ersetzt. Veröffentlicht mit JRL (JavareSearch -Lizenz, Java Research Lizenzvereinbarung).
OpenJDK Download Adresse: //www.vevb.com/softs/75724.html
Kopieren Sie nach dem Herunterladen alle Dateien und Ordner in den nicht packten OpenJDK-6-SRC-B27-26_OCT_2012/JDK/SRC/SHARE/CLASSE-Verzeichnis in das ungebundene SRC-Verzeichnis.
Konfigurieren Sie als Nächstes den zugehörigen Quellcode in Eclipse: Klicken Sie im linken Menü "Java"-> "installiert JRES"-"Windows"-> "Einstellungen" und wählen Sie "Java"-> "Installierte JRES". Wenn die JRE dieser Maschine konfiguriert wurde, müssen Sie sie nicht konfigurieren. Wenn Sie nicht konfiguriert sind, klicken Sie rechts auf die Schaltfläche "Hinzufügen" und wählen Sie den Pfad des installierten JDK6.0-Fensters "JRE" (z. B. C: /java/jdk1.6.0_21). Klicken Sie auf die Schaltfläche "OK", um die Einstellungen von JRE zu vervollständigen.
Wählen Sie die Schaltfläche "Bearbeiten" ... "Bearbeiten ..." rechts, wählen Sie das Rt.jar-Paket im Popup-Fenster aus, klicken Sie auf die Schaltfläche "Quellanhänge ...", klicken Sie im Popup-Fenster "externe Ordner ..." und richten Sie den Quellcodepfad auf den Pfad des SRC (z. B. D:/Amigo/Study/technisches Essay/201405). Siehe Abbildung unten:
Nachdem Sie auf die Schaltfläche "OK" geklickt haben, um sie einzurichten, können Sie beim Schreiben der Implementierung von MD5 und SHA beim Aufrufen der relevanten Methoden von MessagedIGest den Debug-Modus F5 einstufiges Debugging verwenden, um die Klassen, die hauptsächlich an der Implementierung von MD5- und SHA-Einweg-Verschlüsselungsalgorithmen in Java beteiligt sind, anzuzeigen.
1.3 Die Hauptklassen der MD5- und SHA -Verschlüsselung in JDK
In JDK6.0 sind die Klassendiagramme mehrerer Klassen, die eng mit MD5 und SHA zusammenhängen, wie folgt:
Unter ihnen ist "MessagedIGestSpi" die abstrakte Klasse der obersten Ebene, und "Messagedigest" und "DigestBase" unter demselben Paket sind Unterstraktklassen.
Im obigen Klassendiagramm wird das Delegierte -Designmuster verwendet. Das Prinzip dieses Musters ist, dass Klasse B (hier die innere Delegage -Delegage) und Klasse A (hier ist die MessagedIGestSpi -Klasse) zwei Klassen, die keine Beziehung zueinander haben. B hat genau die gleichen Methoden und Attribute wie A; Das Aufrufen von Methoden und Attributen in B besteht darin, Methoden und Attribute mit demselben Namen in A zu rufen. B scheint ein von A genehmigter Vermittler zu sein, der von A-Code von Drittanbietern autorisiert wurde, muss die Existenz von A und seinen Unterklassen nicht kennen, und es muss auch keine direkte Verbindung zu A und seinen Unterklassen haben. Durch B können die Funktionen von A direkt verwendet werden, die nicht nur verschiedene Funktionen von A verwenden können, sondern auch A und seine Unterklassen gut schützen.
Die relevanten Codes für MD5 und SHA sind alle in Klassen wie MD5 und SHA, aber die customergerichtete MessagedIGest-Abstract-Klasse muss sich nicht mit verschiedenen Implementierungsklassen befassen, sondern nur mit ihnen über die Delegierklasse umgehen.
2. MD5 -Verschlüsselung
2.1 Übersicht
Message Digest -Algorithmus MD5 (chinesischer Name ist Message Digest Algorithmus Fifth Edition) ist eine Hash -Funktion, die im Bereich der Computersicherheit weit verbreitet ist, um den Schutz der Nachrichtenintegrität zu bieten. Die Dateinummer dieses Algorithmus lautet RFC 1321 (R. Rivest, MIT -Labor für Informatik und RSA Data Security Inc. April 1992).
Der vollständige Name von MD5 ist der Algorithmus 5 (Information-Abstract-Algorithmus), der von Ronald L. Rivest vom MIT-Labor für Informatik und RSA Data Security Inc entwickelt wurde und von MD2, MD3 und MD4 entwickelt wurde.
MD5 wird verwendet, um eine vollständige und konsistente Informationsübertragung zu gewährleisten. Es ist einer der Hash -Algorithmen, die von Computern weit verbreitet sind (auch als abstrakter Algorithmus und Hash -Algorithmus übersetzt). Die Mainstream -Programmiersprachen werden im Allgemeinen von MD5 implementiert. Die Berechnung von Daten (wie chinesischen Zeichen) in einen anderen Wert mit fester Länge ist das Grundprinzip des Hash-Algorithmus. Die Vorgänger von MD5 waren MD2, MD3 und MD4.
Die Funktion von MD5 besteht darin, Informationen mit großer Kapazität in ein vertrauliches Format "komprimiert" zu werden, bevor ein privater Schlüssel mit einer digitalen Signatursoftware unterzeichnet wird (dh eine Byte-Zeichenfolge jeglicher Länge in eine hexadezimale Zeichenfolge mit einer bestimmten Länge umzuwandeln).
2.2 Algorithmusprinzipien
Eine kurze Beschreibung des MD5-Algorithmus kann wie folgt sein: MD5 verarbeitet die Eingabeinformationen in 512-Bit-Paketen, und jedes Paket ist in 16 32-Bit-Unterpackungen unterteilt. Nach einer Reihe von Verarbeitung besteht die Ausgabe des Algorithmus aus vier 32-Bit-Paketen. Nach der Kaskadierung dieser vier 32-Bit-Pakete wird ein 128-Bit-Hash-Wert generiert.
Im MD5-Algorithmus müssen zuerst die Informationen gefüllt werden, so dass das Ergebnis des verbleibenden Gleichgewichts seines Bitlängenpaares 512 gleich 448 ist. Daher wird die Bitlänge der Informationen auf N*512+448 erweitert, n ist eine nicht negative Ganzzahl, und n kann Null sein. Die Füllmethode lautet wie folgt: Füllen Sie eine 1 und unzählige 0s hinter den Informationen und füllen Sie die Informationen mit 0 auf, bis die oben genannten Bedingungen erfüllt sind. Anschließend ist eine Informationslänge der oberen Fülle in 64-Bit-Binärdateien beigefügt. Nach diesen beiden Verarbeitungsschritten ist die Bitlänge der Information = N*512+448+64 = (N+1)*512, dh die Länge ist genau ein ganzzahliges Vielfaches von 512. Der Grund dafür ist, die Anforderungen für die Informationslänge in der nachfolgenden Verarbeitung zu erfüllen.
2.3 MD5 -Implementierung in Java
Die Java -Implementierung des MD5 -Verschlüsselungsalgorithmus lautet wie folgt:
Paket Amigo.endecrypt; Import Java.security Code*/ public static String md5code (String Instrument) löst eine Ausnahme aus {MessagedIGest md5 = null; try {md5 = MessagedIGest.getInstance ("md5"); } catch (Ausnahme e) {System.out.println (e.toString ()); E. printstacktrace (); zurückkehren ""; } byte [] bytearray = instr.getBytes ("utf-8"); byte [] md5Bytes = md5.Digest (bytearray); StringBuffer hexValue = new StringBuffer (); für (int i = 0; i <md5Bytes.length; i ++) {int val = ((int) md5Bytes [i]) & 0xff; if (val <16) {hexValue.Append ("0"); } hexValue.Append (Integer.tohexString (val)); } return hexValue.toString (); } / ** * Testen Sie die Hauptfunktion * @param args * @throws Exception * / public static void main (String args []) löst eine Ausnahme aus {String str = new String ("amigoxiexiexingxing"); System.out.println ("Original:" + str); System.out.println ("Md5:" + Md5Encode (STR)); }}Testergebnisse:
Original: Amigoxiexiexingxing
Post-MD5: E9AC094091B96B84CCA48098BC21B1D6
3.. Sha -Verschlüsselung
3.1 Übersicht
SHA ist ein Datenverschlüsselungsalgorithmus. Dieser Algorithmus wurde im Laufe der Jahre von Verschlüsselungsexperten entwickelt und verbessert und wurde immer perfekter. Es ist nun zu einem der sichersten Hashing -Algorithmen geworden, die weit verbreitet sind. Die Idee dieses Algorithmus ist es, einen einfachen Text zu empfangen und ihn dann auf irreversible Weise in einen (normalerweise kleineren) Verschlüsselungstext umzuwandeln. Es kann auch einfach als der Prozess der Aufnahme einer Zeichenfolge von Eingabescodes (als Vorbereitung oder Informationen genannt) verstanden und in eine Ausgangssequenz mit kürzerer Länge konvertiert werden, d. H. Hash-Werte (auch als Information Digest oder Information Authentication Code bezeichnet). Der Hash -Funktionswert kann als eine Art "Fingerabdruck" oder "Zusammenfassung" des Klartextes sein, sodass die digitale Signatur des Hash -Werts als digitale Signatur des Klartextes angesehen werden kann.
Der sichere Hash -Algorithmus (SHA) ist der vom National Institute of Standards and Technology veröffentlichte National Standard FIPS Pub 180. Der jüngste Standard wurde 2008 auf FIPS Pub 180-3 aktualisiert. Unter ihnen sind mehrere unidirektionale Hashing-Algorithmen wie SHA-1, SHA-224, SHA-256, SHA-384 und SHA-512 angegeben. SHA-1, SHA-224 und SHA-256 eignen sich für Nachrichten mit einer Länge von nicht mehr als 2^64-Binärbits. SHA-384 und SHA-512 eignen sich für Nachrichten mit einer Länge von nicht mehr als 2^128-Binärbits.
3.2 Prinzip
SHA-1 ist ein Datenverschlüsselungsalgorithmus. Die Idee dieses Algorithmus ist es, einen einfachen Text zu empfangen und ihn dann auf irreversible Weise in einen (normalerweise kleineren) Verschlüsselungstext umzuwandeln. Es kann auch einfach als der Prozess der Aufnahme einer Zeichenfolge von Eingabescodes (als Vorbereitung oder Informationen genannt) verstanden und in eine Ausgangssequenz mit kürzerer Länge konvertiert werden, d. H. Hash-Werte (auch als Information Digest oder Information Authentication Code bezeichnet).
Die Sicherheit einer Einweg-Hash-Funktion liegt in der starken Einbahnstraße ihres Betriebsprozesses zur Erzeugung von Hash-Werten. Wenn ein Passwort in die Eingabesequenz eingebettet ist, kann niemand den richtigen Hash -Wert generieren, ohne das Kennwort zu kennen und so die Sicherheit zu gewährleisten. SHA blockiert die Eingangsströme in 512 Bits (64 Bytes) pro Block und erzeugt 20 Bytes Ausgabe, die als Informationsauthentifizierungscode oder Information Digest bezeichnet werden.
Die Länge der Eingangspakete dieses Algorithmus ist unbegrenzt und der generierte Ausgang ist ein 160-Bit-Meldungsdigest. Der Eingang wird in 512-Bit-Paketen verarbeitet. SHA-1 ist irreversibel, konfliktsicher und hat einen guten Lawineneffekt.
Die digitale Signatur kann über einen Hash -Algorithmus implementiert werden. Das Prinzip der digitalen Signatur besteht darin, den einfachen Text durch eine Funktion Operation (Hash) in einen Meldungsverdau zu konvertieren (verschiedene einfache Texte entsprechen verschiedenen Nachrichtenverdauungen). Der Meldung Digest ist verschlüsselt und zusammen mit dem einfachen Text an den Empfänger gesendet. Der Empfänger generiert eine neue Nachricht Digest zum Entschlüsseln und vergleicht den Meldungsdigest des Absenders. Das Vergleichsergebnis ist konsistent, was bedeutet, dass der einfache Text nicht geändert wurde. Wenn es inkonsistent ist, bedeutet dies, dass der einfache Text manipuliert wurde.
Mac (Information Authentication Code) ist ein Hash -Ergebnis, bei dem ein Teil der Eingabeinformationen ein Kennwort ist. Nur Teilnehmer, die dieses Passwort wissen, können die Legitimität des Mac -Codes erneut berechnen und überprüfen.
3.3 SHA -Implementierung in Java
Die Java -Implementierung von SHA ähnelt MD5 und der Referenzcode lautet wie folgt:
Paket Amigo.endecrypt; Import Java.security shaencode (String Instrumente) löst eine Ausnahme aus {MessagedIGest SHA = NULL; try {sha = mindagedIGest.getInstance ("sha"); } catch (Ausnahme e) {System.out.println (e.toString ()); E. printstacktrace (); zurückkehren ""; } byte [] bytearray = instr.getBytes ("utf-8"); byte [] md5Bytes = sha.Digest (bytearray); StringBuffer hexValue = new StringBuffer (); für (int i = 0; i <md5Bytes.length; i ++) {int val = ((int) md5Bytes [i]) & 0xff; if (val <16) {hexValue.Append ("0"); } hexValue.Append (Integer.tohexString (val)); } return hexValue.toString (); } / ** * Testen Sie die Hauptfunktion * @param args * @throws Exception * / public static void main (String args []) löst eine Ausnahme aus {String str = new String ("amigoxiexiexingxing"); System.out.println ("Original:" + str); System.out.println ("sha:" + shaencode (str)); }}Die Testergebnisse sind wie folgt:
Original: Amigoxiexiexingxing
Nach SHA: 04F79F496DDD6BDAB3439511606528A4AD9CAAC5E
3. Vergleich zwischen SHA-1 und MD5
Da beide von MD4 abgeleitet sind, sind SHA-1 und MD5 einander sehr ähnlich. Entsprechend sind ihre Stärke und andere Eigenschaften ähnlich, aber es gibt auch Unterschiede in den folgenden Punkten:
1) Sicherheit gegen erzwungene Angriffe: Der bedeutendste und wichtigste Unterschied besteht darin, dass der SHA-1-Digest 32 Bit länger ist als der MD5-Digest. Mit der erzwungenen Technologie ist die Schwierigkeit, eine Nachricht so zu erzeugen, dass die Verdauung einem bestimmten Verdauung entspricht, eine Operation der Größenordnung von 2^128 für MD5 und eine Operation von 2^160 für SHA-1. Auf diese Weise hat SHA-1 eine größere Stärke für gewaltsame Angriffe.
2) Sicherheit der Kennwortanalyse: Aufgrund des Entwurfs von MD5 ist sie für die Kennwortanalyse anfällig, und SHA-1 scheint weniger anfällig für solche Angriffe zu sein.
3) Geschwindigkeit: Auf derselben Hardware läuft SHA-1 langsam als MD5.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.