Heim  >  Artikel  >  Java  >  Detaillierte Java-Erklärung der Einwegverschlüsselung MD5, SHA und HMAC sowie einfacher Implementierungsbeispielcode

Detaillierte Java-Erklärung der Einwegverschlüsselung MD5, SHA und HMAC sowie einfacher Implementierungsbeispielcode

黄舟
黄舟Original
2017-03-08 10:46:021404Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn