  | 
					
						Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!   
						
						
					 | 
				 
			 
			 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		storky
 
  
  Anmeldungsdatum: 06.01.2013 Beiträge: 68
 
  | 
		
			
				 Verfasst am: 07.01.2013, 15:25    Titel: Datei verschlüsseln / File encrypter. | 
				     | 
			 
			
				
  | 
			 
			
				Hallo,
 
 
hier stelle ich meinen File encrypter (StorkCrypt) vor.
 
SHA1 Hash Code stammt von:
 
http://www.freebasic-portal.de/downloads/bibliotheken/hash-funktionen-md5-sha1-sha512-169.html
 
 
Download (Mit einfacher GUI):
 
http://www.bunnxchat.de/StorkCrypt.zip
 
 
Wär cool wenn ihr den mal bissel testen könnt, aber ich garantiere für nix. Besser wenn ihr nicht gleich euere Systemdateien verschlüsselt sondern an einer Kopie von irgendwas arbeitet. 
 
 
LG
 
 
 	  | Code: | 	 		  #Include "SHA1Checksum.bas"
 
 
declare function FileLen alias "fb_FileLen" ( byval filename as zstring ptr ) as LongInt
 
Declare Function Replace(ByVal V_Data As String, ByVal V_Expression As String, ByVal V_ReplaceBy As String) As String
 
Declare sub F_SplitString(V_Data as string, B_DD() as string, byref B_DC as long, V_CutString as string, V_ClearArray as byte, V_Casesensitivity as Byte, V_AddEmpty as Byte)
 
 
Dim Shared As Any Ptr w1, w2, w3
 
Dim Shared Key As String Ptr
 
Dim Shared Path As String
 
Dim Shared overallSize As ULongInt
 
Dim Shared overallSizeCurr As ULongInt
 
Dim Shared prozent As UInteger
 
Dim Shared deletestr As String
 
Dim Shared WriteBuffer as String Ptr
 
Dim Shared MBS As Long
 
Dim Shared sec As Long
 
Dim Crypt As String
 
 
WriteBuffer  = Callocate(SizeOf(String) * 2)
 
WriteBuffer[0]  = Space(8192)
 
WriteBuffer[1]  = Space(8192)
 
 
'look for parameters are given
 
If InStr(" " & Command(1), "help") Or Command(1) = "" Then
 
   Print "Usage:"
 
   Print "storkcrypt <e|d> <password> <Folder>"
 
   Print "Example: storkcrypt e password c:\secretfolder"
 
   Print "option e = encrypt folder"
 
   Print "option d = decrypt folder"
 
   Print "Press any key to exit."
 
   Sleep
 
   End
 
EndIf
 
 
If LCase(Command(1)) = "e" Then
 
   Crypt = "\*.*"
 
ElseIf LCase(Command(1)) = "d" Then
 
   Crypt = "\*.crypt"
 
Else
 
   Print "Illegal option: " & Command(1)
 
   Sleep
 
   End
 
EndIf
 
 
'create Key from password (command parameter 1)
 
key       = Callocate(1, 9)
 
Key[0]     = createSHA1(createSHA1(Command(2) & "Passwd1"))
 
 
'de-sha1
 
For sec = 0 To 39
 
   If sec = 39 Then
 
      key[0][sec] = key[0][sec] Xor key[0][0]
 
   Else
 
      key[0][sec] = key[0][sec] Xor key[0][sec+1]
 
   End If
 
Next
 
 
 
Path = COMMAND(3)
 
 
 
'Calculate overall size of files
 
Dim X as long
 
Dim dd() as string
 
Dim dc as long
 
Dim S1 as String
 
 
Path = RTrim(Path, "\")
 
 
open pipe "dir /s " & Chr(34) & Path & Crypt & Chr(34) for input as #1
 
While not eof(1)
 
     Line input #1,S1
 
     If Command(1) = "d" Or (Command(1) = "e" And Not InStr (s1, "*.crypt")) Then
 
        If INSTR(S1,"(en)") and INSTR(S1,"Bytes") Then
 
           F_SplitString S1, dd(), dc, ",", 1, 0, 1
 
           overallsize += Val(Replace(Left(LTrim(dd(2)), Len(LTrim(dd(2)))-6), ".", ""))
 
           Locate (1,1,0)
 
           Print overallsize & " Bytes found";
 
        End If
 
     End If
 
Wend
 
Close #1
 
 
overallsize = overallsize /2
 
Cls
 
 
'encryption thread
 
Sub worker1(p As string)
 
   
 
   Dim As LongInt i, FileSize 
 
   Dim As String oPath 
 
   Dim As Integer keyPos, newKey 
 
 
   If InStr(p, ".crypt") Then oPath = Replace(p, ".crypt", "") Else oPath = P & ".crypt" End If
 
   Open p For Binary Access Read As #1
 
   Open oPath For Binary Access write As #2
 
   FileSize =  Lof(1)+1
 
   i=1
 
   While i
 
      overallSizeCurr +=8192
 
      Get #1, i, writebuffer[1]
 
      For keyPos = 0 To 8191
 
         writebuffer[0][keyPos] = writebuffer[1][keypos] Xor Key[0][newKey]
 
         Filesize-=1
 
         newKey +=1
 
         If newKey =40 Then
 
            newKey = 0
 
         EndIf
 
         If FileSize <= -1 Then
 
            Put #2, i, Left(writebuffer[0], keyPos-1)
 
            Close #1
 
            Close #2
 
            newKey = 0
 
            Exit Sub
 
         EndIf
 
      Next
 
      Put #2, i, writebuffer[0]
 
      i+=8192
 
   Wend
 
End Sub
 
 
'display thread
 
Sub worker2
 
   Dim AS INTEGER pst, row, lin, vis
 
   Do While 1=1
 
      Locate 2,2,1
 
      For prozent = 0 To Int(overallSizeCurr / overallSize * 100) Step 2
 
         Print Chr(178);
 
      Next 
 
      For prozent = Int(overallSizeCurr / overallSize * 100) To 100 Step 2
 
         Print Chr(177);
 
      Next
 
      Locate 3,2,1
 
      Print  Int(overallSizeCurr / overallSize * 100) & "%";
 
      Print " (" & Int(overallSizeCurr/1024/1024) & " /" & Int(overallSize/1024/1024) & " MB)";
 
      sec+=1
 
      Print " @~ " & Int(overallSizeCurr/1024/1024/(sec+1)) & " MB/s";
 
      Sleep 1000
 
   Loop
 
End Sub
 
w2 = ThreadCreate (@worker2)
 
 
 
'main thrad
 
OPEN PIPE "dir /b/s/w " & Chr(34) & path  & Crypt & Chr(34) FOR INPUT AS #3
 
Do UNTIL EOF(3)
 
   LINE INPUT #3, Path
 
   If FileLen(path) Then
 
      If Command(1) = "e" Then
 
         If Right(path,5) = "crypt" Then GoTo a
 
      EndIf
 
      w1 = THREADCALL worker1(path) 
 
      Locate 4,2,1
 
      Print deletestr;
 
      Locate 4,2,1
 
      Print "Current: " & path;
 
      deletestr = Space(Len(path)+100)
 
      ThreadWait w1
 
      Kill path
 
   End If
 
   a:
 
Loop
 
Close #3
 
 
Cls
 
Print "Ready"
 
End
 
 
'various functions
 
Function Replace(ByVal V_Data As String, ByVal V_Expression As String, ByVal V_ReplaceBy As String) As String
 
Dim X As Long
 
Dim SL As Long
 
Dim D as String
 
D = V_Data
 
SL = Len(V_Expression)
 
X = 0
 
Do
 
    X = X + 1
 
    If X > Len(D) - SL + 1 Then Exit Do
 
    If Mid(D, X, SL) = V_Expression Then
 
        D = Mid(D, 1, X - 1) & V_ReplaceBy & Mid(D, X + SL)
 
        X = X + (SL  - 1)
 
        If X < 0 then X = 0
 
    End If
 
Loop
 
Return D
 
End Function
 
 
sub F_SplitString(V_Data as string, B_DD() as string, byref B_DC as long, V_CutString as string, V_ClearArray as byte, V_Casesensitivity as Byte, V_AddEmpty as Byte)
 
if V_ClearArray = 1 then b_dc = 0
 
redim preserve b_dd(b_dc) as string
 
Dim X as long
 
Dim Pos1 as long
 
Dim Pos2 as long
 
Dim SLen as long
 
Dim T as string
 
Dim S as string
 
Dim XOK as byte
 
s = v_cutstring
 
if V_Casesensitivity = 0 then s = lcase(v_cutstring)
 
SLen = len(s)
 
pos1 = 1
 
pos2 = 1
 
for x = 1 to len(v_data) - slen
 
    if V_Casesensitivity = 0 then
 
        if lcase(mid(v_data,x,slen)) = s then
 
            t = mid(v_data,pos1,x-pos1+slen-1)
 
            x+= slen-1
 
            pos1 = x+1
 
        endif
 
    else
 
        if mid(v_data,x,slen) = v_cutstring then
 
            t = mid(v_data,pos1,x-pos1+slen-1)
 
            x+= slen
 
            pos1 = x
 
        endif
 
    endif
 
    if pos1 <> pos2 or x = len(v_data) - slen then
 
        if pos1 = pos2 then t = mid(v_data,pos1)
 
        xok = 1
 
        if t = "" then if v_addempty = 0 then xok = 0
 
        if xok = 1 then
 
            b_dc+= 1
 
            redim preserve b_dd(b_dc) as string
 
            b_dd(b_dc) = t
 
        endif
 
        pos2 = pos1
 
    endif
 
next
 
end Sub | 	 
 
  Zuletzt bearbeitet von storky am 08.01.2013, 09:56, insgesamt 5-mal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		MOD Fleißiger Referenzredakteur
  
  Anmeldungsdatum: 10.09.2007 Beiträge: 1003
 
  | 
		
			
				 Verfasst am: 07.01.2013, 17:27    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Auch wenn du meine SHA1-Umsetzung nutzt, die wenigsten hier werden eine EXE einfach so ausführen. Ich für meinen Teil prüfe und compiliere mir den Code lieber selbst, bevor ich irgendetwas teste. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		storky
 
  
  Anmeldungsdatum: 06.01.2013 Beiträge: 68
 
  | 
		
			
				 Verfasst am: 07.01.2013, 17:38    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Hab den Code eingefügt. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		ThePuppetMaster
 
  
  Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
  | 
		
			
				 Verfasst am: 07.01.2013, 22:18    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				öööm
 
 
was machst du da?
 
 
 	  | Code: | 	 		  Dim Shared WriteBuffer as String Ptr
 
WriteBuffer  = Allocate(17)
 
WriteBuffer[0]  = Space(8192)
 
WriteBuffer[1]  = Space(8192)
 
 | 	  
 
 
das sieht keinesfalls vernümpftig aus.
 
 
wenn, dann so hier:
 
 	  | Code: | 	 		  Dim Shared WriteBuffer as String Ptr
 
WriteBuffer  = CAllocate(SizeOf(String) * 2)
 
WriteBuffer[0]  = Space(8192)
 
WriteBuffer[1]  = Space(8192)
 
 | 	  
 
 
MfG
 
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		nemored
 
  
  Anmeldungsdatum: 22.02.2007 Beiträge: 4712 Wohnort: ~/
  | 
		
			
				 Verfasst am: 07.01.2013, 22:34    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hmm - wenn ich 24 Byte Speicher reserviere und da einen 8192-Byte-String reinschreibe - wenn ich das richtig verstehe - hört sich das nicht so vernünftig an ... _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		ThePuppetMaster
 
  
  Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
  | 
		
			
				 Verfasst am: 07.01.2013, 22:37    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				@nemored .. er reserviert string ptr's ... n String is n 12Byte (3x 4 byte uint) type. macht zusammen 24 byte (17 reichen nicht)
 
 
dann greift er auf den string per [ ] zu und setzt n space von 8192. das is ansich schon ok. aber der allocate (sollte CAllocate sein  um string-type zu nullen) war etwas zu klein.
 
 
 
MfG
 
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Jojo alter Rang
  
  Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
  | 
		
			
				 Verfasst am: 07.01.2013, 22:39    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				WriteBuffer[0] / WriteBuffer[1] enthält ja nur den String-Header, nicht den Inhalt. Ist trotzdem beides total umständlich - wieso nicht einfach so?
 
 	  | Code: | 	 		  | Dim Shared WriteBuffer(0 to 1) As String | 	  
 
 
Ansonsten, was soll SHA-1 (ein bereits als unsicher geltender Hash-Algorithmus) in einem Verschlüsselungsprogramm? SHA-1 ist eine Einwegfunktion und macht hier überhaupt keinen Sinn - Du hast damit immer einen XOR-Schlüssel gleicher Länger, d.h. bei einer Dateilänger größer der Schlüssellänge (eine sehr wahrscheinliche Situation) wird es recht trivial, den Schlüssel zu erraten. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		nemored
 
  
  Anmeldungsdatum: 22.02.2007 Beiträge: 4712 Wohnort: ~/
  | 
		
			
				 Verfasst am: 08.01.2013, 00:05    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Jojo hat Folgendes geschrieben: | 	 		  Ist trotzdem beides total umständlich - wieso nicht einfach so?
 
 	  | Code: | 	 		  | Dim Shared WriteBuffer(0 to 1) As String | 	 
  | 	  
 
Ja, so hätte ich das auch sofort verstanden   aber dann hätte ich dafür heute im Chat nicht eine Menge über den internen Aufbau von STRING PTR gelernt.   _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		storky
 
  
  Anmeldungsdatum: 06.01.2013 Beiträge: 68
 
  | 
		
			
				 Verfasst am: 08.01.2013, 06:52    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Hey,
 
 
danke für die "Pointerschelte", ich komme frisch von vb6 (8 Jahre Erfahrung) doch dort kam ich nie in den Genuss von Pointern, so war es das erste Mal und ich bin eher experimentell an die Sache rangegangen. Auf die 17 kam ich durch testen erhlich gesagt (ich wusste aber schon, dass das eine komische Zahl ist, aber dachte -> stürzt nicht ab, ok muss nicht größer sein)
 
Wenn ich das jetzt aber so bedenke schreibt der über seinen Speicher hinaus und könnte eventuell etwas "kaputt machen" und dann doch abschmieren?
 
 
Pointer sind aber soweit schonmal was richtig feines, hatte in etwa den selben Algo vorher in VB6 umgesetzt und kam an Stringfunktionen nicht vorbei, also:
 
 
out = out & chr(asc(mid(alt, stelle, 1)) xor asc(mid(key, stelle, 1)))
 
 
^^will nicht wissen wie lang das in Assembler in HD ist   war aufjedenfall ein Programm zum schön warten. Durch die Pointer kann ich jedoch mit 2 Ticks (durch die indexes) direkt das Byte verrechnen und zurück schreiben?
 
 
@Jojo
 
 
 	  | Zitat: | 	 		  | Ansonsten, was soll SHA-1 (ein bereits als unsicher geltender Hash-Algorithmus) in einem Verschlüsselungsprogramm? SHA-1 ist eine Einwegfunktion und macht hier überhaupt keinen Sinn | 	  
 
 
Sha1 wird verwendet um das Passwort zu hashen mit dem die Datei verschlüsselt wird und wird nicht auf die Datei angewandt. Das ist notwendig da man sonst stellen weiße Bruteforcen könnte. Ist Quasi ein Pseudozufallsgenerator dem das eingegebene Passwort als Initialwert dient.
 
Ich setze die gesamte Datei ins Xor mit Key, der fängt immer wieder an der ersten Stelle an bis die ganze Datei durch ist, die einzigste Möglichkeit das zu cracken ist..
 
 
a) Angreifer kennt ein Stück Originaldatei, z.B. Fileheader, setzt das ins XOR und erhält den key den er cracken muss und nicht jeder wird SHA1 Kollisionen provozieren können.. selbst wenn, eine Sache gilt als sicher wenn der Aufwand oder die Zeit zum knacken die Dauer überschreitet, in der die Informationen als "wichtig" gelten.
 
 
b) man Findet ein damaliges 0 Byte Segment wo der Key dann im Klartext drin steht, das Segment sollte 80 Bytes lang sein.. dann kann man sicher sein dass der Key einmal komplett drin steht, dann auch cracken^^
 
Ich denke für Normalanwender völlig ok, wobei ich während einigen Tests selbst ne Datei verschlüsselt und das Pw fast vergessen habe, war ne AVI die im Head haufen Nullbytes hat... hab dann solange von meinen Erinnerungsversuchen hash(hash(versuch.Passwd1)) gebildet bis der Key aus dem Head Teilweiße auftauchte, hat geklappt aber ich hab das Pw ja quasi gewusst am Ende... Bruteforce geht anders.
 
 
Zuerst hatte ich aber auch vor den Key ständig mit sich selbst versetzt in Xor zu nehmen und aller 40 Bytes neu zu hashen etc, aber das ging deftig auf die Performance, könnte vllt noch ne Option für Paranoide anbieten die viel Zeit haben, oder halt einzenlne Dateien verschlüsseln wollen die wirklich wichtig sind.
 
 
So ich bin dann mal weg und studiere Pointer.
 
LG
 
 
Edit:
 
 
"Key mit sich selbst versetzt ins Xor nehmen" <- dazu fällt mir gerade ein, wenn ich das am Anfang einmal mache, hat meinen einen unbrauchbaren Sha1 Hash... weil dann muss man bis zu 36^40 Möglichkeiten durchgehen, bis man den Hash hat der in 2 facher sha1 Verschlüsselung + den String, die verschlüsselte Bytefolge ergibt die auf den 0 Bytes liegt oder den man anhand einer Originaldatei errechnet hat.
 
Also da wär dann die Pornosammlung vor der Freundin entgültig geheim  
 
@Jojo nicht falsch verstehen, war ein Witz.. ist natürlich richtig, dass man nach seinen Möglichkeiten so eine Sache möglichst gut machen sollte, deswegen werde ich das noch reinbasteln.
 
 
Edit2:
 
 
Hab das oben genannte umgesetzt, den Pointer nach ThePuppetMaster geändert, was am Threading geändert (damit der Verschlüsslungstread überhaupt zu etwas simultan läuft) und was an der Consolenausgabe optimiert.
 
Hab das Codelisting und Archiv geupdatet.
 
Das Schöne ist jetzt, man sieht auf ehemaligen 0 Byte Segmenten nciht mehr, dass es sich im einen Hash handelt... Maximal eine Wiederholung von Bytes.
 
Danke schonmal  
 
 
Nochmals Edit... Habe etwas an der Benutzbarkeit gefeilt, man kann nun de/encryption als option übergeben, je nach dem werden *.* oder nur *.crypt Dateien bearbeitet. Falls mal was schief läuft, kann man an der alten Stelle fortsetzen ohne gecryptete Dateien doppelt zu verschlüsseln oder unverschlüsselte zu verschlüsseln... | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Jojo alter Rang
  
  Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
  | 
		
			
				 Verfasst am: 08.01.2013, 10:55    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | storky hat Folgendes geschrieben: | 	 		  | Sha1 wird verwendet um das Passwort zu hashen mit dem die Datei verschlüsselt wird und wird nicht auf die Datei angewandt. Das ist notwendig da man sonst stellen weiße Bruteforcen könnte. Ist Quasi ein Pseudozufallsgenerator dem das eingegebene Passwort als Initialwert dient. | 	  
 
Und? Dann bruteforct man eben den SHA-1-Key und nicht das originale Passwort. Das wird einem Angreifer eh egal sein, der will nur an die Daten. XOR-Verschlüsselung mit so einem Key ist immer gleich unsicher, egal wie oft du ihn hashst. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		
			
				 Verfasst am: 08.01.2013, 11:31    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Jojo hat Folgendes geschrieben: | 	 		   	  | storky hat Folgendes geschrieben: | 	 		  | Sha1 wird verwendet um das Passwort zu hashen mit dem die Datei verschlüsselt wird und wird nicht auf die Datei angewandt. Das ist notwendig da man sonst stellen weiße Bruteforcen könnte. Ist Quasi ein Pseudozufallsgenerator dem das eingegebene Passwort als Initialwert dient. | 	  
 
Und? Dann bruteforct man eben den SHA-1-Key und nicht das originale Passwort. Das wird einem Angreifer eh egal sein, der will nur an die Daten. XOR-Verschlüsselung mit so einem Key ist immer gleich unsicher, egal wie oft du ihn hashst. | 	  
 
Das ist absolut gold-richtig.
 
Eine sichere Verschlüsselung muss einiges leisten. Grobe Hinweise zur Implementierung:
 
-Eine echte Schlüsselableitungsfunktion verwenden. Ich hab vor einiger Zeit da mal was drüber geschrieben wie das grob geht: http://blog.enkore.de/truecrypt-breach/ Abschnitt Key Derivation
 
-Einen sicheren Verschlüsselungsalgorithmus im richtigen Modus verwenden.
 
Als Algorithmus nimmt man meistens AES.
 
Als Modus werden heutzutage meistens CBC/ESSIV oder XTS benutzt. Reines CBC ist recht einfach zu implementieren und auch halbwegs sicher… | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		storky
 
  
  Anmeldungsdatum: 06.01.2013 Beiträge: 68
 
  | 
		
			
				 Verfasst am: 08.01.2013, 12:03    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Ja aes hatte ich Anfangs vor, jedoch möchte ich auf die Änderung hinweißen:
 
 
 	  | Code: | 	 		  'create Key from password (command parameter 1)
 
key         = Callocate(1, 9)
 
Key[0]     = createSHA1(createSHA1(Command(2) & "Passwd1"))
 
 
'de-sha1
 
For sec = 0 To 39
 
   If sec = 39 Then
 
      key[0][sec] = key[0][sec] Xor key[0][0]
 
   Else
 
      key[0][sec] = key[0][sec] Xor key[0][sec+1]
 
   End If
 
Next | 	   
 
 
^^Dass ich während der ganzen Verschlüsslung überhaupt kein Sha1 verwende. Da der Key sich nach doppeltem Hashvorgang (nur um das pw auf min 40 zeichen zu bringen) selbst ins xor nimmt und xor nur rückgängig gemacht werden kann wenn beide Operanten bekannt sind, muss man 36^40 Möglichkeiten durchgehen im einen sha1 hash zu erhalten der auf einen sha1 hash passt der wiederrum zum pw gehört.
 
Der Hashvorgang dient ausschließlich dazu, dass z.B. bei pw "hallo", pw "halli" nicht ein teilweiße richtiges Ergebnis liefert, hat aber mit der Verschlüsslung gar nix zu tun und ist eine Art Zufallsgenerator.
 
Da irre ich mich doch nicht?
 
 
Oder ganz einfach:
 
http://bunnxchat.de/1.txt.crypt
 
 
Wers schafft zu knacken,.. ja weiß auch nicht.. äh der ist schlau  
 
 
Nachtrag, bei dem ganzen Trubaborium ist mir aber jetzt mal aufgefallen, dass eine vollständige 80 Bytes lange %00 Kette oder 40 Bytes Originaldatei immer noch ausreicht um die Datei zu entschlüsseln, da man dann auf den ganzen Schmodder wie das generiert wird verzichten und den Key einfach auslesen kann, da ist dann auch völlig egal ob der SHA1 ist oder nicht oder einfach 12345... ist vielleicht auch das was du meinstest. (Ist aber bei der Hackaufgabe nicht der Fall   )
 
 
Der Key muss unbedingt rotieren. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		storky
 
  
  Anmeldungsdatum: 06.01.2013 Beiträge: 68
 
  | 
		
			
				 Verfasst am: 08.01.2013, 12:22    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Zitat: | 	 		  Und? Dann bruteforct man eben den SHA-1-Key und nicht das originale Passwort. Das wird einem Angreifer eh egal sein, der will nur an die Daten. XOR-Verschlüsselung mit so einem Key ist immer gleich unsicher, egal wie oft du ihn hashst.
 
 | 	  
 
Ja ok ich sehs ein, ^^nach meiner Änderung bruteforced man dann ebend den ultimativen, kaputten, nicht wiederherrstellbaren Sha1 Key, ist völlig Wurst. Sobald man weiß wonach man sucht, sind die Chancen noch ziehmlich groß fündig zu werden...
 
 
Hmm, Denkpause.
 
 
Edit: Bin aber immer noch der Auffassung, dass man mit dem Prog seine Daten vor "normalen" Menschen gut verstecken kann. Weil das hier so einen professionellen Touch annimmt. Aber why not? Bissel Weiterentwickeln schadet nicht. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Jojo alter Rang
  
  Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
  | 
		
			
				 Verfasst am: 08.01.2013, 13:51    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				"Normale" Menschen möchten vermutlich auch nicht in deinen Daten rumschnüffeln. Das Projekt mag jetzt einen netten Lerneffekt gehabt haben, aber wenn du wirklich eine funktionierende Verschlüsselung einsetzen möchtest, solltest du lieber auf Projekte wie TrueCrypt zurückgreifen (allein schon wegen des erhöhten Komforts). Verschlüsselungstechnik ist keineswegs trivial und sollte nur von Leuten implementiert werden, die auch wirklich wissen, was sie tun und auch beweisen können, dass ihre Implementierung korrekt und sicher ist. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		
			
				 Verfasst am: 08.01.2013, 21:50    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Jojo hat Folgendes geschrieben: | 	 		  | "Normale" Menschen möchten vermutlich auch nicht in deinen Daten rumschnüffeln. Das Projekt mag jetzt einen netten Lerneffekt gehabt haben, aber wenn du wirklich eine funktionierende Verschlüsselung einsetzen möchtest, solltest du lieber auf Projekte wie TrueCrypt zurückgreifen (allein schon wegen des erhöhten Komforts). Verschlüsselungstechnik ist keineswegs trivial und sollte nur von Leuten implementiert werden, die auch wirklich wissen, was sie tun und auch beweisen können, dass ihre Implementierung korrekt und sicher ist. | 	  
 
dm-crypt/LUKS!   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Flo aka kleiner_hacker
 
  Anmeldungsdatum: 23.06.2006 Beiträge: 1210
 
  | 
		
			
				 Verfasst am: 10.01.2013, 02:17    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				GELI! _________________ MFG
 
Flo
 
 
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
 
 
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
  | 
   
 
     |