Gemeinsame Verschlüsselungsalgorithmen
Basis-Einweg-Verschlüsselungsalgorithmus:
Base64 streng genommen gehört es zum Codierungsformat, nicht zum Verschlüsselungsalgorithmus
MD5 (MessagedIGestalgorithmus5, Information Digest Algorithmus)
SHA (SecureHashalgorithmus, sicherer Hash -Algorithmus)
HMAC (HashMessageAuthenticationCode, Hash -Nachrichtenauthentifizierungscode)
Komplexe symmetrische Verschlüsselung (DES, PBE), asymmetrische Verschlüsselungsalgorithmen:
DES (DataEncryptionSpandard, Datenverschlüsselungsalgorithmus)
PBE (passwordbasierte Konzern, basierend auf der Passwortüberprüfung)
RSA (der Name des Algorithmus ist nach dem Erfinder benannt: Ronrivest, Adi Shamir und Leonard Adleman)
DH (Diffie-Hellman-Algorithmus, Schlüsselkonsistenzprotokoll)
DSA (Digitalsignaturalgorithmus, digitale Signatur)
ECC (Kryptographie elliptische Kurven)
Digitale Signatur
Kurze Beschreibung des Algorithmus
Der digitale Signaturalgorithmus kann als Message Digest -Algorithmus mit einem Schlüssel angesehen werden, und dieser Schlüssel enthält sowohl einen öffentlichen als auch einen privaten Schlüssel. Das heißt, der digitale Signaturalgorithmus ist eine Kombination eines asymmetrischen Verschlüsselungsalgorithmus und des Message Digest -Algorithmus.
Merkmale
Digitale Signaturalgorithmen erfordern die Fähigkeit, die Datenintegrität zu überprüfen, Datenquellen zu authentifizieren und eine Rolle bei der Widerstandsdauer zu spielen.
Prinzip
Der digitale Signaturalgorithmus umfasst zwei Operationen: Signatur und Überprüfung, die den Methoden der privaten Schlüsselsignatur und der öffentlichen Schlüsselüberprüfung folgt.
Bei der Unterzeichnung sollten der private Schlüssel und die zu signierten Daten verwendet werden. Bei Überprüfung sollten der öffentliche Schlüssel, der Signaturwert und die zu signierten Daten verwendet werden. Der Kernalgorithmus ist hauptsächlich der Algorithmus zur Meldung Digest.
1. Meldung Zusammenfassung
String beforedegist = "asdf"; System.out.println ("vor" Zusammenfassung: "+beforedegist); // Erstinformationen sollten in ein Byte-Stream-Byte [] plelligtext = beforedegist.getBytes (" utf8 ") konvertiert werden. Messagedigest.getInstance ("SHA-1"); neuer String (MessagedIGest.Digest (), "UTF8");2. private Schlüsselverschlüsselung
/*** Dieses Beispiel soll eine Zeichenfolge mit einem privaten Schlüssel verschlüsseln und dann mit dem privaten Schlüssel entschlüsseln, um zu überprüfen, ob es konsistent ist. Der private Schlüssel wird verschlüsselt, was symmetrische Verschlüsselung* unter Verwendung eines symmetrischen Algorithmus ist. Zum Beispiel: A verwendet einen Schlüssel, um eine Datei zu verschlüsseln, und B benötigt den gleichen Schlüssel wie a, und beide Parteien teilen einen * privaten Schlüssel (und in der Webumgebung kann der private Schlüssel leicht zu hören) * * Anhang: Die wichtigsten symmetrischen Algorithmen sind: DESS (der tatsächliche Schlüssel verwendet nur 56 Bits). <span style = "White-Space: Pre;"> </span> String vor = "Asdf"; byte [] plainText = vor.getBytes ("utf8"); // Schritt 1. System.out.println ("Start AES-Schlüssel generieren"); // eine Instanz von Keygenerator unter Verwendung des AES-Algorithmus Keygenerator Keygen = Keygenerator. keygen.generateKey (); System.out.println ("Finishing generieren aes key ="+key);// Schritt 2.
// Erhalten Sie eine Cipher -Verschlüsselungsklasse für private Schlüssel, und das Definieren der grundlegenden Informationen von Cipher: ECB ist die Verschlüsselungsmethode, und PKCS5Padding ist die Füllmethode Cipher Cipher = Cipher.getInstance ("AES/ECB/PKCS5Padding"); //System.out.println("/n " + cipher.getProvider (). GetInfo ());// Schritt 3.
// Verwenden Sie den privaten Schlüssel, um system.out.println zu verschlüsseln ("/n Verschlüsseln Sie mit dem privaten Schlüssel ..."); // Verwenden Sie den gerade als Parameter generierten Schlüssel und initialisieren Sie die Verschlüsselungsklasse mit dem gerade erhaltenen privaten Schlüssel. Cipher.encrypt_mode bedeutet Verschlüsselung cipher.init (cipher.encrypt_mode, Schlüssel); // Die Cipher -Verschlüsselungsklasse der privaten Schlüssel wird verschlüsselt, und nach der Verschlüsselung wird ein Byte -Stream zurückgegeben, byte [] byte [] cipherText = cipher.dofinal (plaintext). String (CipHerText, "Utf8"); System.out.println ("komplett mit privater Schlüsselverschlüsselung:"+After1);// Schritt 4.
[Java] Sehen Sie sich die einfache Kopie an // verwenden Sie den privaten Schlüssel, um die Informationen zu entschlüsseln, die gerade verschlüsselt sind, um festzustellen, ob er konsistent ist. Cipher.decrypt_mode bedeutet das entschlüsselungsschlüsselsystem. cipher.dofinal (CipherText); String After2 = new String (newPlainText, "utf8"); system.out.println ("entschlüsselt mit dem privaten Schlüssel:"+After2);3.. Öffentliche Schlüsselverschlüsselung
String vor = "asdf"; byte [] plainText = vor.getBytes ("utf8"); // Generieren Sie einen RSA -Schlüsselgenerator Keyypairgenerator (wie der Name impliziert: ein Paar von Schlüsselgeneratoren) Tastaturen Keygen = Keypairgenerator.getInstance ("rsa"). Generieren Sie eine Taste durch Tastepairgenerator. Hinweis: Der Schlüssel hier ist ein Tastenpaar! ! Tastepair key = keygen.generateKeypair (); // eine RSA -Cipher -Klasse erhalten, verschlüsselt mit public key cipher cipher = cipher. System.out.println ("/n mit öffentlichem Schlüssel verschlüsselt ..."); // Cipher.encrypt_mode bedeutet Verschlüsselung, holen Sie den öffentlichen Schlüssel aus einem Paar von Keys.getPublic () cipher.init (cipher.encrypt_mode, key.getPublic ()); cipher.dofinal (plainText); // Byte -Stream in die String in utf8 Format String After1 = neuer String (CiphERText, "Utf8"); System.out.println ("Verwenden Sie die Verschlüsselung der öffentlichen Schlüssel:"+After1); // decrypt System.out.println ("/ndecrypt mit privatem Schlüssel ..."); // cipher.decrypt_mode bedeutet entschlüsselt, den privaten Schlüssel aus einem Paar von Keys Schlüssel () cipher.init (cipher.init (cipherit (cipherit "(cipherit (cipherit key.getPrivate ()); // Entschlüsseln Sie mit dem privaten Schlüssel und geben Sie einen Byte -Stream -Byte [] newPlainText = cipher.dofinal (ciphERText); String After2 = new String (newPlainText, "utf8");4. Digitale Signatur
/*** Dieses Beispiel ist ein Beispiel für die digitale Signatur. Verwenden Sie den RSA Private Key, um den Meldungsverdau aufzuschreiben (hier bezieht sich auf die Originaldaten) und verwenden Sie dann den öffentlichen Schlüssel, um die Signatur zu verifizieren. * * A verschlüsselt die Daten mit Bs öffentlichem Schlüssel und sendet sie an B. B verwendet Bs privatem Schlüssel, um das erforderliche Daten zu entschlüsseln. Bs öffentlicher Schlüssel zur Verschlüsselung einer Kopie von Daten und Senden von B ist auf diese Weise die Frage, dass die Daten von b von b gesendet werden? B und A muss zwei Teile vorbereiten: 1 und 2 * 1: A verwendet Bs öffentlicher Schlüssel, um die ursprünglichen Informationen als Vertraulichkeit zu verschlüsseln (nur Bs privates Schlüssel kann abgepackt werden, aber andere können andere Schlüssel nicht auspacken. Natürlich ist es vertraulich) * 2: A verwendet A's private Schlüssel, um zu bestimmen. Und dann übergeben Sie es an B. Gleichzeitig verwendet C Cs privaten Schlüssel, um Informationen an B. zu unterschreiben, was B akzeptieren will, sind die Daten von A (z. vor.getBytes ("utf8"); // Bildung eines RSA Public Key Pair Keypairgenerator Keygen = KeypairGenerator.getInstance ("RSA"); keygen.initialize (1024); KeyPair key = keyGen.generateKeyPair();//Sign with private key************************************************* Signature sig = Signature.getInstance("SHA1WithRSA"); sig.initSign(key.getPrivate());//sig object obtains the private key//Signed object obtains the original data sig.update(plainText);//sig object obtains the original data (in reality, the digest of the original data is used, and the digest is one-way, that is, it cannot be decrypted after the digest algorithm) byte[] signature = Sig.Sign (); // SIG -Objekt verwendet den privaten Schlüssel, um die Originaldaten zu unterschreiben, und erhält die Signatur nach der Unterzeichnung von Signature em.out.println (sig.getProvider (). getInfo ()); String After1 = new String (Signatur, "utf8"); System.out.println ("/nSign mit privatem Schlüssel:"+After1); // Verwenden Sie den öffentlichen Schlüssel, um Sig.initverify (key.getPublic ()) zu verifizieren, um zu verifizieren. (Sig.Verify (Signatur)) {// Sig -Objekt entschlüsselt die Signatur mit öffentlichem Schlüssel, um die ursprünglichen Daten zu erhalten (d. H. Zusammenfassung), wenn True System.out.println ("Signaturverifizierung ist korrekt !!" +new String (Klartext, "Utf8"); {System.out.println ("Signaturverifizierung fehlgeschlagen !!");}5. Digitales Zertifikat
/*** Dieses Beispiel ist ein Vorgang in der Datei "Digital Certificate"* Die Java -Plattform (Installation von JDK auf dem Computer) bietet Ihnen einen Keystore (Zertifikatbibliothek). Der Befehl keytool wird unter cmd bereitgestellt, um die Zertifikatbibliothek * * vor dem Ausführen dieses Beispiels zu erstellen: * Erstellen Sie ein Zertifikat im C -Disk -Verzeichnis, geben Sie die Zertifikatbibliothek für BocSoftKeylib an und erstellen Sie ein Zertifikat mit der Alias TestCertifikation. Es gibt an, dass es mit dem * RSA -Algorithmus generiert wird und die Schlüssellänge 1024 beträgt und das Zertifikat 1 Jahr lang gültig ist Tc.cer CertificateFactory CF = CertificateFactory.getInstance ("X.509"); FileInputStream in = new FileInputStream ("c: /tc.cer"); // Lesen Sie die Datei in der Zertifikatklassenzertifikat in Form eines Datei -Stream -Zertifikats c = cf.generateCertificate (in). "+c.toString ());*// oder verwenden Sie nicht die obige Code -Methode, lesen Sie die Zertifikatsinformationen direkt aus der Zertifikatbibliothek, die genau wie der obige String -Pass =" qazzaq "; FileInputStream in2 = new FileInputStream (" C:/BocSoftKeylib "); Keystore; ks = keystore.getInstance ("jks"); ks.load (in2, pass.toCharArray ()); String alias = "testcertification"; // alias ist das alias Zertifikat c = ks.getCertificat (alias); System.err.println ("Zertifikatsinformationen nach Konvertieren von Titeln. Dies ist eine Unterklasse der Zertifikatklasse, um Zertifikat zu erhalten, und implementiert mehr Methoden x509Certificate t = (x509certificate) c; // Die erforderlichen Informationen aus dem Information System.out.println ("Versionsnummer:"+T.Getversion (); Nummer: "+T.GetSerialNumber (). ToString (16)); System.out.println (" Betreff Name ":"+T.GetSubjectDn ()); System.out.println ("Eitten:"+T.GetissuerDn ()); "+t.getNotbefore ()); System.out.println (" Signaturalgorithmus: "+t.getSigalgname (); i = 0; i <pkenc.length; i ++) {System.out.print (PKEC [i]+",");} System.err.println (); // Zertifikatdatum -Gültigkeitsprüfung, Ausgegebene Zertifikate haben ein gültiges Datum des Datums Timenow = Neues Datum (); Datum! "); // Überprüfen Sie die Gültigkeit der Zertifikatsignatur und geben Sie dem Kunden CA -Zertifikat über die Organisation Digital Certificate Certification Center (CA) aus, wie z. B. caroot.crt Datei // Ich habe nicht das von der CA ausstellende Zertifikat ausgestellt. Daher kann der folgende Code nicht ausgeführt werden. vgl. GenerateCertificate (in3); System.out.println ("Date -Validitätsprüfung des Zertifikats: abgelaufen"); } catch (Validitätsprüfung des Zertifikats: abgelaufen ");} catch (Validitätsprüfung des Zertifikats: abgelaufen"); } catch (Validitätsprüfung des Zertifikats: abgelaufen ");} catch (FilenotFoundException CE) {CE.printstacktrace ();} catch (FilenotFoundException fe) {fe.printstacktrace ();} /*catch (ioException ioe) {{} catch (keystorexcept e) {e.printstacktrace ();}}Zusammenfassen
Bei dem oben genannten Zusammenhang geht es um die vollständigen Code -Beispiele für Java -Verschlüsselung, Entschlüsselung und digitale Signaturen. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!