Der symmetrische Verschlüsselungsalgorithmus ist ein früherer Verschlüsselungsalgorithmus mit ausgereifter Technologie. Beim symmetrischen Verschlüsselungsalgorithmus verarbeitet der Datensender den Klartext (Originaldaten) und den Verschlüsselungsschlüssel (mi yue) zusammen mit einem speziellen Verschlüsselungsalgorithmus, wandelt sie in komplexen verschlüsselten Chiffretext um und versendet ihn. Nachdem der Empfänger den Chiffretext erhalten hat und den Originaltext entschlüsseln möchte, muss er den für die Verschlüsselung verwendeten Schlüssel und den umgekehrten Algorithmus desselben Algorithmus verwenden, um den Chiffretext zu entschlüsseln und ihn in lesbaren Klartext wiederherzustellen. Beim symmetrischen Verschlüsselungsalgorithmus wird nur ein Schlüssel verwendet. Sowohl der Sender als auch der Empfänger verwenden diesen Schlüssel, um die Daten zu verschlüsseln und zu entschlüsseln.
Einfache Java-Verschlüsselungsalgorithmen sind:
Streng genommen ist BASE ein Kodierungsformat, kein Verschlüsselungsalgorithmus
MD (Message Digest-Algorithmus, Message Digest-Algorithmus)
SHA (Sicherer Hash-Algorithmus, sicherer Hash-Algorithmus)
HMAC (Hash Message Authentication Code, Hash-Nachrichtenauthentifizierungscode)
Typ 1. BASIS
Base ist eine der gebräuchlichsten Kodierungsmethoden für die Übertragung von Bit-Byte-Codes im Internet. Sie können sich RFC~RFC ansehen, das detaillierte Spezifikationen für MIME enthält. Die Basiskodierung kann verwendet werden, um längere Identifikationsinformationen in einer HTTP-Umgebung zu übermitteln. Beispielsweise wird Base im Java-Persistenzsystem Hibernate verwendet, um einen langen eindeutigen Bezeichner (normalerweise eine -Bit-UUID) in eine Zeichenfolge zu kodieren, die als Parameter in HTTP-Formularen und HTTP-GET-URLs verwendet wird. In anderen Anwendungen ist es häufig erforderlich, Binärdaten in eine Form zu kodieren, die für die Platzierung in einer URL geeignet ist (einschließlich versteckter Formularfelder). Zu diesem Zeitpunkt ist die Basiskodierung nicht lesbar, d. h. die kodierten Daten sind mit bloßem Auge nicht direkt sichtbar. (Quelle: Baidu-Enzyklopädie)
Java-Implementierungscode:
package com.cn. Einwegverschlüsselung; import sun.misc.BASEDecoder;/*BASE-Verschlüsselung und -Entschlüsselung sind inoffizielle JDK-Implementierungen Klassen. Obwohl es im JDK gefunden und verwendet werden kann, ist es nicht in der API zu finden. Die Klassen, die in JRE mit sun und com.sun beginnen, sind nicht dokumentiert. Sie gehören zur Basis von Java- und Javax-Klassenbibliotheken. Die meisten ihrer Implementierungen beziehen sich auf die zugrunde liegende Plattform und werden im Allgemeinen nicht empfohlen. Streng genommen ist BASE ein Codierungsformat, während Nicht-Verschlüsselungsalgorithmen hauptsächlich die beiden Klassen BASEEncoder und BASEDecoder umfassen. Wir müssen nur wissen, wie man die entsprechenden Methoden verwendet. Darüber hinaus ist die Anzahl der nach der BASE-Verschlüsselung generierten Bytes ein Vielfaches von . Wenn die Anzahl der Bytes nicht ausreicht, füllen Sie sie mit dem Symbol = auf. BASE Gemäß der RFC-Definition ist Base wie folgt definiert: Die Base-Content-Transfer-Kodierung soll eine beliebige Folge von Bits in einer Form beschreiben, die von Menschen nicht leicht direkt erkannt werden kann. (Die Basis-Content-Transfer-Encoding ist darauf ausgelegt, beliebige Oktettfolgen in einer Form darzustellen, die nicht für Menschen lesbar sein muss.) Wird häufig in E-Mails und bei der HTTP-Verschlüsselung verwendet. Beim Abfangen von HTTP-Informationen finden Sie die Felder für Benutzername und Passwort für die Anmeldung Operationen verschlüsselt über BASE. */public class BASE { /** * BASE decryption* * @param key * @return * @throws Exception */ public static byte[] decryptBASE(String key) throws Exception { return (new BASEDecoder()).decodeBuffer(key ); } /** * BASE-Verschlüsselung* * @param key * @return * @throws Exception */ public static String encryptBASE(byte[] key) löst eine Exception aus { return (new BASEEncoder()).encodeBuffer(key); } public static void main(String[] args) { String str=""; try { String result= BASE.encryptBASE(str.getBytes()); out.println("result=====encrypted data=========="+result[]= BASE.decryptBASE(result); str=new String(result); System.out.println("str========Entschlüsselte Daten========"+str } Catch (Exception e) { e.printStackTrace( ); } }}
Zweiter Typ
MD ist der Message-Digest-Algorithmus (Message-Digest-Algorithmus), der verwendet wird, um eine vollständige und konsistente Informationsübertragung sicherzustellen. Es handelt sich um einen der in Computern weit verbreiteten Hash-Algorithmen (auch als Digest-Algorithmus übersetzt und MD-Hash-Algorithmus wurde allgemein in gängigen Programmiersprachen implementiert). Die Umwandlung von Daten (z. B. chinesischen Schriftzeichen) in einen anderen Wert fester Länge ist das Grundprinzip des Hash-Algorithmus. Die Vorgänger von MD sind MD, MD und MD. Wird häufig in der Verschlüsselungs- und Entschlüsselungstechnologie verwendet und häufig zur Dateiüberprüfung verwendet. überprüfen? Unabhängig von der Größe der Datei kann nach MD ein eindeutiger MD-Wert generiert werden. Die aktuelle ISO-Kalibrierung ist beispielsweise die MD-Kalibrierung. Wie benutzt man es? Natürlich wird der MD-Wert generiert, nachdem ISO durch MD geleitet wurde. Freunde, die Linux-ISO heruntergeladen haben, haben im Allgemeinen die MD-Zeichenfolge neben dem Download-Link gesehen. Es wird verwendet, um zu überprüfen, ob die Dateien konsistent sind.
Java-Implementierung:
package com.cn. Einwegverschlüsselung; import java.security.MessageDigest;/*MD (Message Digest-Algorithmus, Message Digest-Algorithmus) Normalerweise verwenden wir die oben genannte MD-Verschlüsselung nicht. Normalerweise wird das von MD generierte Byte-Array an BASE übergeben und dann verschlüsselt, um die entsprechende Zeichenfolge zu erhalten. Digest: Assembly*/public class MD { public static final String KEY_MD = "MD" public static String getResult(String inputStr) { System .out.println("========Daten vor der Verschlüsselung:"+inputStr); BigInteger bigInteger=null try { MessageDigest md = MessageDigest.getInstance(KEY_MD); byte[] inputData = inputStr.getBytes(); bigInteger = new BigInteger(md.digest() } Catch (Exception e) {e.printStackTrace(); } System.out.println("Nach MD-Verschlüsselung:" + bigInteger.toString()); bigInteger.toString(); } public static void main(String args[]) { try { String inputStr = "Simple interaction" (Ausnahme e) { e.printStackTrace( } };
Der MD-Algorithmus weist die folgenden Eigenschaften auf:
. Kompressibilität: Für Daten beliebiger Länge ist die Länge des berechneten MD-Werts festgelegt.
, Einfach zu berechnen: Der MD-Wert lässt sich leicht aus den Originaldaten berechnen.
. Änderungsresistenz: Wenn Änderungen an den Originaldaten vorgenommen werden, wird der resultierende MD-Wert sehr unterschiedlich sein, selbst wenn nur ein einzelnes Byte geändert wird.
, Schwacher Kollisionsschutz: Wenn man die Originaldaten und ihren MD-Wert kennt, ist es sehr schwierig, Daten mit demselben MD-Wert (dh gefälschte Daten) zu finden.
, Starker Kollisionsschutz: Es ist sehr schwierig, zwei verschiedene Daten zu finden, die denselben MD-Wert haben.
Die Funktion von MD besteht darin, die „Komprimierung“ umfangreicher Informationen in ein vertrauliches Format zu ermöglichen (d. h. eine Bytefolge beliebiger Länge in eine Folge hexadezimaler Ziffern bestimmter Länge umzuwandeln), bevor der private Schlüssel digital signiert wird Signatursoftware. Zu den bekannteren gehören neben MD auch sha-, RIPEMD und Haval.
Der dritte Typ.SHA
Der sichere Hash-Algorithmus ist hauptsächlich auf den digitalen Signaturalgorithmus DSA anwendbar, der im Digital Signature Standard DSS definiert ist. Für Nachrichten mit einer Länge von weniger als ^ Bits erstellt SHA einen Ein-Bit-Nachrichtenauszug. Dieser Algorithmus wurde im Laufe der Jahre von Verschlüsselungsexperten entwickelt und verbessert und zunehmend perfektioniert und weit verbreitet eingesetzt. Die Idee dieses Algorithmus besteht darin, ein Stück Klartext zu empfangen und es dann auf irreversible Weise in ein Stück (normalerweise kleineren) Chiffretext umzuwandeln. Dies kann auch einfach so verstanden werden, dass eine Zeichenfolge von Eingabecodes verwendet wird (sogenanntes Pre-Mapping). oder Informationen) und der Prozess der Umwandlung in eine kürzere, feststellige Ausgabesequenz, also einen Hash-Wert (auch Message Digest oder Message Authentication Code genannt). Der Hash-Funktionswert kann als „Fingerabdruck“ oder „Digest“ des Klartextes bezeichnet werden, sodass die digitale Signatur des Hash-Werts als digitale Signatur des Klartextes betrachtet werden kann.
Java-Implementierung:
Paket com.cn. Einwegverschlüsselung; import java.security.MessageDigest;/*SHA (Secure Hash Algorithm, sicherer Hash-Algorithmus), digitale Signatur und andere wichtige Tools in Kryptografieanwendungen Es wird häufig in Bereichen der Informationssicherheit wie dem E-Commerce eingesetzt. Obwohl sowohl SHA als auch MD durch Kollisionsmethoden geknackt wurden, ist SHA immer noch ein anerkannter sicherer Verschlüsselungsalgorithmus und sicherer als MD*/public class SHA { public static final String KEY_SHA = "SHA"; { BigInteger sha =null; System.out.println("=======Daten vor der Verschlüsselung:"+inputStr inputStr.getBytes(); try { MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA); messageDigest.update(inputData(inputData); System.out.println("Nach SHA-Verschlüsselung:" + sha.toString()); } Catch (Ausnahme e) {e.printStackTrace();} return sha.toString(); } public static void main(String args[]) { try { String inputStr = "Einfache Verschlüsselung" } Catch (Exception e) { e.printStackTrace( } };
SHA-Vergleich mit MD
Da beide von MD abgeleitet sind, sind SHA- und MD einander sehr ähnlich. Dementsprechend sind ihre Stärken und sonstigen Eigenschaften ähnlich, es gibt jedoch einige Unterschiede:
Sicherheit gegen Brute-Force-Angriffe: Der bedeutendste und wichtigste Unterschied besteht darin, dass der SHA-Digest länger ist als der MD-Digest. Mit Brute-Force-Techniken ist die Schwierigkeit, eine Nachricht zu generieren, deren Digest einem bestimmten Nachrichten-Digest entspricht, eine Operation in der Größenordnung von MD und eine Operation in der Größenordnung von SHA-. Dadurch ist SHA besser gegen Brute-Force-Angriffe gewappnet.
Sicherheit gegen Kryptoanalyse: Aufgrund des Designs von MD, das anfällig für Kryptoanalyse-Angriffe ist, scheint SHA weniger anfällig für solche Angriffe zu sein.
Geschwindigkeit: SHA – läuft langsamer als MD auf derselben Hardware.
Der vierte Typ.HMAC
HMAC (Hash Message Authentication Code, Hash-Nachrichtenauthentifizierungscode, Authentifizierungsprotokoll basierend auf dem Schlüssel-Hash-Algorithmus. Das Prinzip des Nachrichtenauthentifizierungscodes zur Implementierung der Authentifizierung besteht darin, eine öffentliche Funktion und einen Schlüssel zu verwenden, um einen Wert fester Länge als Authentifizierungskennung zu generieren. Verwendung Dies identifiziert die Integrität der Nachricht. Verwenden Sie einen Schlüssel, um einen kleinen Datenblock fester Größe, nämlich MAC, zu generieren, fügen Sie ihn der Nachricht hinzu und übertragen Sie ihn dann mithilfe des mit dem Absender geteilten Schlüssels zur Authentifizierung.
Java-Implementierungscode:
package com.cn.One-Way Encryption;/*HMACHMAC(Hash Message Authentication Code, Hash-Nachrichtenauthentifizierungscode, Authentifizierungsprotokoll basierend auf dem Schlüssel-Hash-Algorithmus. Das Prinzip des Nachrichtenauthentifizierungscodes besteht darin, eine öffentliche Funktion und einen Schlüssel zu verwenden, um einen Wert fester Länge als Authentifizierungskennung zu generieren, und diese Kennung zur Authentifizierung der Integrität zu verwenden Die Nachricht. Verwenden Sie einen Schlüssel, um einen kleinen Datenblock mit fester Größe zu generieren, nämlich MAC, und fügen Sie ihn der Nachricht hinzu. Der Empfänger verwendet dann den mit dem Absender geteilten Schlüssel zur Authentifizierung usw. */import javax.crypto. .KeyGenerator;import javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import com.cn.comm.Tools;/** * Grundlegende Verschlüsselungskomponente*/ public abstract class HMAC { public static final String KEY_MAC = "HmacMD"; /** * HMAC-Schlüssel initialisieren* * @return * @throws Exception */ public static String initMacKey() löst eine Ausnahme aus { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC); SecretKey secretKey = keyGenerator.generateKey(); return BASE.encryptBASE(secretKey.getEncoded()); } /** * HMAC-Verschlüsselung: Hauptmethode * * @param data * @param key * @return * @throws Exception */ public static String encryptHMAC(byte[] data, String key) throws Exception { SecretKey SecretKey = new SecretKeySpec(BASE.decryptBASE(key), KEY_MAC); mac.getInstance(secretKey.getAlgorithm()); return new String(mac.doFinal(data)); static String getResult(String inputStr) { String path=Tools.getClassPath(); fileSource=path+"/file/HMAC_key.txt"; System.out.println("=======Daten vor der Verschlüsselung:"+inputString result=null; try { byte[] inputData = inputStr. getBytes(); String key = HMAC.initMacKey(); /*Generate key*/ System.out.println("Mac key:===" + key); Tools.WriteMyFile(fileSource,key); result= HMAC.encryptHMAC(inputData, key); );} return result.toString(); } public static String getResult(String inputStr) { System.out.println("========Daten vor der Verschlüsselung:"+inputString); String path=Tools.getClassPath(); String fileSource=path+"/file/HMAC_key.txt"; ;; try { /*Lesen Sie den Schlüssel aus der Datei*/ key=Tools.ReadMyFile(fileSource); System.out.println("getResult key:===" + key); (Ausnahme e) { e.printStackTrace();} String result=null; try { byte[] inputData = inputStr.getBytes(); /*Encrypt data*/ result= HMAC.encryptHMAC(inputData, key); .println("Nach HMAC-Verschlüsselung:===" + Ergebnis); } Catch (Ausnahme e) {e.printStackTrace();} return result.toString( } public static void main(String args[]) { try { String inputStr = "Einfache Verschlüsselung"; /*Verwenden Sie den gleichen Schlüssel: Verschlüsseln Sie die Daten: Überprüfen Sie, ob die Ergebnisse der beiden Verschlüsselungen gleich sind*/ getResult(inputStr); ); } Catch (Ausnahme e) { e.printStackTrace();
Der obige Inhalt besteht aus mehreren Verschlüsselungsalgorithmen (vier Typen), die häufig in Java verwendet werden, und ich hoffe, dass sie Ihnen gefallen.