Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
			
		
		
			
				
								R3booz 							 
									
		Beiträge:  90  		Registriert:  01.11.2012 19:28 		
		
											Computerausstattung:  Intel Core I3, 4GB RAM, RADEON HD 6660 1 GDDR5 
												
							
				Kontaktdaten: 
				
			 
				
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von R3booz   »  20.02.2014 22:51 
			
			
			
			
			Habe da grade mal was lustiges geschrieben bin zufällig auf die Wiki Seite gestossen und habs mal umgesetzt  
  
http://de.wikipedia.org/wiki/One-Time-Pad 
Eine einfache Verschlüsselungsmethode, der Key muss genauso lang wie das zu verschlüsselnde sein.
Hier der Quellcode für die Funktionen:
Code: Alles auswählen 
Procedure.s SK_Enc_OneTimePad(in.s,key.s)
  If Len(in.s) > Len(key.s)
    ProcedureReturn ""
  EndIf
  For i=1 To Len(in.s)
    eins.s=Mid(in.s,i,1)
    zwei.s=Mid(key.s,i,1)
    weins = Asc(eins.s)
    wzwei = Asc(zwei.s)
    If weins+wzwei > 255
      gesamt = (weins+wzwei)-256
    Else
      gesamt = (weins+wzwei)
    EndIf
    new.s + Chr(gesamt)
  Next
  ProcedureReturn new.s
EndProcedure
Procedure.s SK_Dec_OneTimePad(in.s,key.s)
  If Len(in.s) > Len(key.s)
    ProcedureReturn ""
  EndIf
  For i=1 To Len(in.s)
    eins.s=Mid(in.s,i,1)
    zwei.s=Mid(key.s,i,1)
    weins = Asc(eins)
    wzwei = Asc(zwei)
    If weins-wzwei < 255
      gesamt = (weins-wzwei)+256
    Else
      gesamt = (weins-wzwei)
    EndIf
    new.s + Chr(gesamt)
  Next
  ProcedureReturn new.s
EndProcedure
Procedure.s SK_Enc_OneTimePadKey(in.s)
  For i=0 To Len(in.s)
    key.s + Chr(Random(255,0))
  Next
  ProcedureReturn key.s
EndProcedure
Test:
Code: Alles auswählen 
Debug SK_Enc_OneTimePad("Test","hsze")
Debug SK_Dec_OneTimePad(SK_Enc_OneTimePad("Test","rofl"),"hsze")
Viel Spass damit  
  
mfg R3booz
 
			
			
									
									
						 
		 
				
		
		 
	 
				
			
		
		
			
				
								NicTheQuick 							 
						Ein Admin 			
		Beiträge:  8816  		Registriert:  29.08.2004 20:20 		
		
											Computerausstattung:  Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti 
												Wohnort:  Saarbrücken 
							
						
		 
		
						
						
													
							
						
									
						Beitrag 
					 
								von NicTheQuick   »  21.02.2014 00:16 
			
			
			
			
			Sowas hatte ich auch mal gebastelt.
Code: Alles auswählen 
Procedure OTP_EncDec(*data.Character, *key.Character)
	Protected *k.Character = *key
	
	While *data\c
		*data\c ! *k\c
		*data + SizeOf(Character)
		If (*k\c = 0)
			*k = *key
		Else
			*k + SizeOf(Character)
		EndIf		
	Wend
EndProcedure
Procedure.s String2Hex(*string.Character)
	Protected result.s
	
	While *string\c
		result + RSet(Hex(*string\c), SizeOf(Character) * 2, "0")
		*string + SizeOf(Character)
	Wend
	
	ProcedureReturn result
EndProcedure
Define input.s = "Hallo"
Define key.s = "12.d#"
Define *memInput = AllocateMemory(SizeOf(Character) * (Len(input) + 1))
CopyMemory(@input, *memInput, MemorySize(*memInput))
Debug "Original: " + String2Hex(@input)
OTP_EncDec(*memInput, @key)
Debug "Verschlüsselt: " + String2Hex(*memInput)
OTP_EncDec(*memInput, @key)
Debug "Entschlüsselt: " + String2Hex(*memInput)
Define key2.s = "12ld#"
OTP_EncDec(*memInput, @key2)
Debug "Verschlüsselt: " + String2Hex(*memInput) + " (Nur noch 2 Zeichen wegen Nullbyte an dritter Stelle!)"
Bei dir ist allerdings noch ein kleiner Fehler drin. Man kann nämlich keine Nullbytes in Strings verwenden. Diese können nach der Verschlüsselung aber durchaus vorkommen. Zum Beispiel dann, wenn der Schlüssel an einer Stelle den selben Buchstaben enthält wie der zu verschlüsselnde String. Das siehst du auch in meinem Code als Beispiel.