Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Bäckerei B. Rot (Schleifen)

Die Bäckerei B. Rot schließt ihren Betrieb aufgrund roter Zahlen. Angestellte der ehemaligen Bäckerei suchen nun Arbeit, die sie beim Plattenleger Placido finden.

Plattenleger Placido, 19 Jahre alt, hatte vor Kurzem die Idee, seine eigene Firma zu gründen, und was wäre da besser geeignet als sein langjähriger Traumjob – Plattenleger?

Mit der Aufgabe, sich um die neuen Angestellten zu kümmern, ist er aber völlig überfordert. Er überlegt sich daher, einen Organisationsplaner auf seinem Rechner zu installieren. Gesagt, getan.

Am nächsten Montag finden die Angestellten ihn verzweifelt vor dem Rechner sitzen – Plattenleger Placido hat das Kennwort des Organisationsplaners vergessen, welches aus vier Ziffern besteht. Ein computergewandter Angestellter sucht im Internet nach einer Lösung und findet schließlich eine versteckte Datei, die das Kennwort als MD5-Hash enthält. Dieselbe Internetseite verweist auch auf eine Seite, die diesen Hash als Klartext ausgeben kann, jedoch wurde beim letzten Update der Seite wohl ein Fehler im JavaScript-Code eingebaut, sodass nun keine Ausgabe mehr erscheint. Jetzt ist der computergewandte Angestellte gefragt.

Schreiben Sie ein Programm, welches auf Basis des MD5-Hashes das Passwort ausgibt. Dieses Programm sollte ohne Internet funktionieren sowie auf den Gebrauch von Rainbow Tables verzichten.

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

HowDenKing 5. August 2020 11:28   reply report
Und ob die Aufgabenstellung auch richtig durchgelesen wurde,
kann man prüfen, indem man den Code 0123 versucht.
eb62f6b9306db575c2d596b1279627a4

(oder jeden anderen 0XXX Code)

7 Lösung(en)

using System;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace Hashrechner
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Gebe den Hash Wert ein:");
            string Input = Console.ReadLine();

            for(int i = 0; i <= 9999; i++)
            {
                MD5 H = MD5.Create();
                byte[] PW = H.ComputeHash(new UTF8Encoding().GetBytes(i.ToString()));
                
                string Hash = "";
                PW.ToList().ForEach(x => Hash += x.ToString("X2"));

                if (Hash.ToLower() == Input.ToLower())
                {
                    Console.WriteLine("Das Passwort lautet: {0}", i);
                }

            }
            Console.ReadKey();          
        }
    }
}

                

Lösung von: Tobias Golz (Wilhelm Büchner Hochschule)

import hashlib


to_be_cracked = input("MD5: ").lower()

for i in range(9999):
    the_hash = hashlib.md5()
    
    digits = "{:04d}".format(i)
    the_hash.update(digits.encode())

    crack = the_hash.hexdigest()

    if(crack == to_be_cracked):
        print("Das Passwort ist {0}.".format(i))

                

Lösung von: Ich Bins (tubs)

<?php
	/** 
	Extrem wichtig ist hier, dass ein 4-Stelliger Code verlangt wird.
	Ein md5 hash von 0, 1, ..., 999 ist NICHT gleich 0000, 0001, ..., 0999.
	**/
		
	if(isset($_POST['hash'])) // Hash-Check & Output
		{
			$decrypted = ""; // variable definieren, da sonst "undefined variable" Fehler ausgegeben werden.
			for($i = 0; $i <= 9999; $i++)  
				{
					$output = ($i < 10 ? "000".$i : ($i < 100 && $i > 9 ? "00".$i : ($i < 1000 && $i > 99 ? "0".$i : ($i < 1000 ? $output : $i)))); //Falls $i Einstellig (0-9), stelle $i 3 Nullen vor, sonst falls zweistellig, stelle 2 Nullen vor, etc.
						$md5 = md5($output); //Die aktuelle Zahl mit md5 encrypten.
						($_POST['hash'] == $md5 ? $decrypted = $output : ""); //Überprüfen, ob der eingegebene wert mit $md5 übereinstimmt.
				}
			echo ($decrypted == "" ? "Fehler: Eingegebener Hash ist ungültig, nicht gesetzt oder nicht im gegebenen Bereich" : "Der 4-Stellige Code ist: ".$decrypted);
		}
	else // HTML Form Input damit der Benutzer einen Code eingeben kann.
		{
			echo "<form method=\"POST\" enctype=\"text/plain\">"."\r\n";
			echo "<input type=\"text\" name=\"hash\" value=\"81dc9bdb52d04dc20036dbd8313ed055\" style=\"width:300px;\">"."\r\n"; //Test-String 1234 als md5 bereits vorgegeben.
			echo "<input type \"submit\" value=\"Hash Testen\">"."\r\n";
			echo "</form>"."\r\n";
		}
?>
                

Lösung von: Howard Dennis King (IT-Schule Stuttgart)

public class MD5Dehash {
    
    public static void main(String[] args) {
        MD5Dehash md5Dehash = new MD5Dehash();
        String md5;
        if(args.length > 0){
            md5 = args[0];
        }else{
            System.out.print("Bitte geben sie den MD5-Hash ein: ");
            java.util.Scanner in = new java.util.Scanner(System.in);
            md5 = in.nextLine();
            System.out.println("");
        }
        
        try {
            md5Dehash.tryDehash(md5, 4);
        } catch (java.security.NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        }
    }

    private void tryDehash(String givenHash, int pwLength) throws java.security.NoSuchAlgorithmException {
        String lastDigit = "";
        for(int i = 0; i < pwLength; i++){
            lastDigit = lastDigit + "9";
        }
        
        for(int i = 0; i < Integer.parseInt(lastDigit); i++){
            String pw = Integer.toString(i);
            String zeros = "";
            for(int x = 0; x < pwLength-pw.length(); x++){
                zeros = zeros + "0";
            }
            
            pw = zeros + pw;
            
            if(genMD5Hash(pw).equals(givenHash.toUpperCase())){
                System.out.println("Das Passwort ist: " + pw);
                return;
            }
        }
        
        System.out.println("Das Passwort konnte nicht dehasht werden!");
    }
    
    private String genMD5Hash(String possiblePw) throws java.security.NoSuchAlgorithmException{
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        md.update(possiblePw.getBytes());
        byte[] digest = md.digest();
        return javax.xml.bind.DatatypeConverter.printHexBinary(digest).toUpperCase();
    }
}
                

Lösung von: Name nicht veröffentlicht

NET Core 3.x

using System;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace HashTest
{
    class Program
    {
        static void Main(string[] args)
        {
            const string md5 = "81dc9bdb52d04dc20036dbd8313ed055"; // 1234

            var pin = Enumerable.Range(0, 9999)
                .Select(x => new {number = x, hash = string.Join("", MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(x.ToString()))
                    .Select(s => s.ToString("x2")))}).Where(x => x.hash == md5).Select(x => x.number).FirstOrDefault();

            Console.WriteLine($"Das Passwort lautet: {pin}");
        }
    }
}
                

Lösung von: Jens Kelm (@JKooP)

using System;
using System.Security.Cryptography;
using System.Text;

namespace BRot
{
    class Program
    {
        static void Main()
        {
            Console.Write("Bitte geben Sie den zu decryptenden MD5 Hash ein.\nEin Test-Hash wird verwendet sollte die Eingabe leer oder ungültig sein.\nHash:");

            // MD5 Hash abfragen
            string hash = Console.ReadLine().ToLower();
            string testHash = "def7924e3199be5e18060bb3e1d547a7", maxValue = "10000", input = null, output = null;

            // Prüfen, ob Eingabe leer, oder nicht korrekt ist.
            if (string.IsNullOrEmpty(hash) || hash.Length != 32)
            {
                hash = testHash;
            }

            for (int runs = 0; runs <= int.Parse(maxValue); runs++)
            {
                // Aufgabenstellung: 4 Stelliger Code
                input = runs.ToString("0000");
                output = MakeMD5(input);
                Console.WriteLine($"{input} | {output}");

                // Wenn Hash nicht in Range 0000 - 9999 setze output auf null um eine Fehlermeldung zu erzwingen.
                if (output == MakeMD5(maxValue))
                {
                    output = null;
                }

                // Wenn Hashes übereinstimmen, bricht die Schleife ab, da es keinen Grund gibt, weiter zu testen
                if (output == hash)
                {
                    break;
                }
            }

            // Ausgabe an den Benutzer
            Console.Clear();
            if (string.IsNullOrEmpty(output))
            {
                Console.Write($"Decrypten fehlgeschlagen.\nDrücken sie Enter um das Program zu schließen.");
                Console.ReadLine();
            }
            else
            {
                Console.Write($"Decrypteter Code: {input}\nDrücken sie Enter um das Program zu schließen.");
                Console.ReadLine();
            }
        }
        static string MakeMD5(string hash)
        {
            // MD5 Hash generieren
            MD5 md5 = MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(hash);
            byte[] hashBytes = md5.ComputeHash(inputBytes);

            // Array zu String konvertieren und diesen weitergeben
            StringBuilder stringbuilder = new StringBuilder();
            for (int runs = 0; runs < hashBytes.Length; runs++)
            {
                stringbuilder.Append(hashBytes[runs].ToString("X2"));
            }
            hash = stringbuilder.ToString();
            return hash.ToLower();
        }
    }
}
                

Lösung von: Howard Dennis King (IT-Schule Stuttgart)

import {getHash} from 'md5.js';

const hash = 'def7924e3199be5e18060bb3e1d547a7';

function leadZero(num, len) {
  num = num.toString();
  while (num.length < len) num = '0' + num;
  return num;
}

let found = false,
    i = 0;

while (!found && i <= 9999) {
  let iLZ = leadZero(i, 4);
  if (getHash(iLZ) == hash) {
    found = true;
    console.log(iLZ);
  }
  i++;
}
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

Verifikation/Checksumme:

MD5: def7924e3199be5e18060bb3e1d547a7 Passwort: 3456

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.25
Schwierigkeit: Leicht
Webcode: xyik-p5d5
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen