Heim >Java >javaLernprogramm >Detaillierte Java-Erklärung der Einwegverschlüsselung MD5, SHA und HMAC sowie einfacher Implementierungsbeispielcode
In diesem Artikel werden hauptsächlich Javas detaillierte Erklärungen zur Einwegverschlüsselung (MD5, SHA und HMAC) sowie einfache Implementierungsbeispiele vorgestellt. Freunde in Not können sich
Javas detaillierte Erklärungen zur Einwegverschlüsselung (MD5) ansehen , SHA und HMAC sowie einfache Implementierungsbeispiele
Zusammenfassung:
Die drei Verschlüsselungsalgorithmen MD5, SHA und HMAC können als nicht umkehrbare Verschlüsselung bezeichnet werden eine Verschlüsselungsmethode, die nicht entschlüsselt werden kann.
MD5
MD5 ist der Message-Digest-Algorithmus 5 (Message-Digest-Algorithmus 5), der verwendet wird, um eine vollständige und konsistente Informationsübertragung sicherzustellen. MD5 ist ein Algorithmus, der Informationen variabler Länge eingibt und eine feste Länge von 128 Bit ausgibt.
Der MD5-Algorithmus weist die folgenden Eigenschaften auf:
1. Komprimierbarkeit: Für Daten beliebiger Länge ist die Länge des berechneten MD5-Werts festgelegt.
2. Einfache Berechnung: Der MD5-Wert lässt sich leicht aus den Originaldaten berechnen.
3. Änderungsresistenz: Wenn Sie Änderungen an den Originaldaten vornehmen, wird der resultierende MD5-Wert sehr unterschiedlich sein, selbst wenn nur 1 Byte geändert wird.
4. Starker Kollisionsschutz: Angesichts der Originaldaten und ihres MD5-Werts ist es sehr schwierig, Daten mit demselben MD5-Wert (dh gefälschte Daten) zu finden.
MD5 wird auch häufig bei der Anmeldeauthentifizierung von Betriebssystemen wie Unix, verschiedenen BSD-System-Anmeldekennwörtern, digitalen Signaturen und vielen anderen Aspekten verwendet. Beispielsweise wird in einem Unix-System das Passwort des Benutzers nach dem Hashing mit MD5 (oder anderen ähnlichen Algorithmen) im Dateisystem gespeichert. Wenn sich der Benutzer anmeldet, führt das System eine MD5-Hash-Operation für das vom Benutzer eingegebene Passwort durch und vergleicht es dann mit dem im Dateisystem gespeicherten MD5-Wert, um festzustellen, ob das eingegebene Passwort korrekt ist. Durch solche Schritte kann das System die Legitimität der Anmeldung des Benutzers beim System feststellen, ohne den eindeutigen Code des Benutzerkennworts zu kennen. Dadurch wird verhindert, dass das Passwort des Benutzers Benutzern mit Systemadministratorrechten bekannt wird. MD5 ordnet eine „Byte-Zeichenfolge“ beliebiger Länge einer 128-Bit-Ganzzahl zu, und es ist sehr schwierig, die ursprüngliche Zeichenfolge durch diese 128-Bit-Zeichenfolge umzukehren.
SHA
SHA (Secure Hash Algorithm, sicherer Hash-Algorithmus), ein wichtiges Werkzeug in kryptografischen Anwendungen wie digitalen Signaturen, ist weit verbreitet Es wird häufig in Bereichen der Informationssicherheit wie dem E-Commerce eingesetzt. Obwohl sowohl SHA als auch MD5 durch Kollisionsmethoden geknackt wurden, ist SHA immer noch ein anerkannter sicherer Verschlüsselungsalgorithmus und sicherer als MD5.
Die durch SHA definierte Länge
Der Relay-Hash-Wert (interner Status) in der folgenden Tabelle stellt den komprimierten Hash jedes Datenblocks dar. Der Relay-Wert ( interne Hash-Summe).
算法 | 输出散列值长度(bits) | 中继散列值长度(bits) | 数据区块长度(bits) | 最大输入消息长度(bits) | 一个Word长度(bits) | 循环次数 | 使用到的运算符 | 碰撞攻击 |
---|---|---|---|---|---|---|---|---|
SHA-0 | 160 | 160 | 512 | 264 − 1 | 32 | 80 | +,and,or,xor,rotl | 是 |
SHA-1 | 160 | 160 | 512 | 264 − 1 | 32 | 80 | +,and,or,xor,rotl | 存在263的攻击 |
SHA-256/224 | 256/224 | 256 | 512 | 264 − 1 | 32 | 64 | +,and,or,xor,shr,rotr | 尚未出现 |
SHA-512/384 | 512/384 | 512 | 1024 | 2128 − 1 | 64 | 80 | +,and,or,xor,shr,rotr | 尚未出现 |
HMAC
HMAC (Hash Message Authentication Code), Hash-Nachrichtenauthentifizierungscode, Authentifizierungsprotokoll basierend auf dem Schlüssel-Hash-Algorithmus. Das Prinzip des Nachrichtenauthentifizierungscodes besteht darin, mithilfe einer öffentlichen Funktion und eines öffentlichen Schlüssels einen Wert fester Länge als Authentifizierungskennung zu generieren und diese Kennung zur Authentifizierung der Integrität der Nachricht zu verwenden. Mithilfe eines geheimen Schlüssels wird ein kleiner Datenblock fester Größe, der MAC, generiert, der der Nachricht hinzugefügt und dann übertragen wird. Der Empfänger verwendet den mit dem Absender geteilten Schlüssel zur Authentifizierung und Authentifizierung.
Java-Beispiel
package com.zzj.encryption; import java.security.MessageDigest; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * 单向加密(非可逆加密) * @author lenovo * */ public class OneWayEncryption { static final String ALGORITHM_MD5 = "MD5"; static final String ALGORITHM_SHA = "SHA"; /** * MAC算法可选以下多种算法 * <pre class="brush:php;toolbar:false"> * HmacMD5 * HmacSHA1 * HmacSHA256 * HmacSHA384 * HmacSHA512 **/ static final String ALGORITHM_MAC = "HmacMD5"; /** 密钥 **/ static final String MAC_KEY = "abcdef"; public static void main(String[] args) throws Exception { String source = "我是程序猿!我很骄傲!"; // MD5加密 printBase64(encryptionMD5(source)); // SHA加密 printBase64(encryptionSHA(source)); // HMAC加密 printBase64(encryptionHMAC(source)); } static void printBase64(byte[] out) throws Exception { System.out.println(encodeBase64(out)); } /** * MD5加密 * @param source * @return * @throws Exception */ static byte[] encryptionMD5(String source) throws Exception { MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5); md.update(source.getBytes("UTF-8")); return md.digest(); } /** * SHA加密 * @param source * @return * @throws Exception */ static byte[] encryptionSHA(String source) throws Exception { MessageDigest md = MessageDigest.getInstance(ALGORITHM_SHA); md.update(source.getBytes("UTF-8")); return md.digest(); } /** * HMAC加密 * @return * @throws Exception */ static byte[] encryptionHMAC(String source) throws Exception { SecretKey secretKey = new SecretKeySpec(MAC_KEY.getBytes("UTF-8"), ALGORITHM_MAC); Mac mac = Mac.getInstance(ALGORITHM_MAC); mac.init(secretKey); mac.update(source.getBytes("UTF-8")); return mac.doFinal(); } /** * base64编码 * @param source * @return * @throws Exception */ static String encodeBase64(byte[] source) throws Exception{ return new String(Base64.encodeBase64(source), "UTF-8"); } }
Ergebnis:
1cNbZhnhFsFV3BFPLA71wA== kl5KI61Xq44E/SzSPa2sUntMAEc= JF2v/u9td5l8yGAImNvTZw==
Das obige ist der detaillierte Inhalt vonDetaillierte Java-Erklärung der Einwegverschlüsselung MD5, SHA und HMAC sowie einfacher Implementierungsbeispielcode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!