Registriert seit: 06.12.2015
Version(en): 2016
Hallo, gegeben ist ein encodierter String: "lofwvscrdcutometnpnisktoqurgycazhjxrb" und ein Algorithmus zum Dekodieren. Frage: Wie kommt man vom Klartext zum enkodierten String? Code: Option Explicit
Function decode(ByVal Tx As String) As String Dim s As Long, p, x As Long, m As Long, q As Integer, y As Integer, e As String, b As Integer, t As Integer
s = 325197 t = Len(Tx)
ReDim p(t)
For b = 0 To t - 1 p(b) = Mid(Tx, b + 1, 1) Next b
For b = 0 To t - 1 x = s * (b + 412) + (s Mod 21331) m = s * (b + 467) + (s Mod 43934) q = x Mod t y = m Mod t e = p(q) p(q) = p(y) p(y) = e s = (x + m) Mod 1769511 Next b decode = Join(p, "") End Function
Sub T_1() Debug.Print Mid(decode("lofwvscrdcutometnpnisktoqurgycazhjxrb"), 1, 11)
End Sub
Das Ergebnis ist: constructor Der Code vertauscht mehrfach zwei Buchstaben, an einigen Positionen auch mehrfach. Ein Buchstabe mehr oder weniger führt zu völlig anderen Ergebnissen. Der gesuchte Algorithmus zum Encodieren sollte für beliebe String funktionieren. mfg
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
23.02.2024, 16:11
(Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2024, 16:20 von LCohen.)
Ich finde nirgends das Wort "Constructor".
Oder setzst Du hier einen Begriff aus der OOP voraus?
Desweiteren solltest Du komplette Artikel schreiben, also auch das Ergebnis nennen.
Ich komme mit dem Code nicht klar und erhalte über Einfügen in ein Modul und F5 oder F8 kein Ergebnis.
Registriert seit: 18.10.2020
Version(en): 365
Zitat:Der gegebene Code verwendet einen modifizierten Fisher-Yates Shuffle-Algorithmus, um den Klartext zu verschlüsseln. Der Algorithmus funktioniert, indem er Buchstaben an verschiedenen Positionen im String vertauscht. Hier ist eine kurze Erklärung des Algorithmus:
Eine Startzahl s wird festgelegt (in diesem Fall ist es 325197). Der Klartext wird in ein Array p konvertiert. Eine Schleife durchläuft jedes Element des Arrays und tauscht die Buchstaben an verschiedenen Positionen basierend auf Berechnungen mit der Startzahl s. Die Berechnungen (Modulo und Multiplikation) erzeugen Pseudozufallszahlen, die dazu verwendet werden, zwei Positionen im Array zu wählen und die Buchstaben an diesen Positionen zu vertauschen. Der neue verschlüsselte String wird durch Verbinden der Array-Elemente erstellt. Um den Klartext zu verschlüsseln, könnte man den gleichen Algorithmus verwenden, indem man den Code leicht ändert, um den Prozess umzukehren. Hier ist eine angepasste Funktion für die Verschlüsselung:
Code: Function encode(ByVal Tx As String) As String Dim s As Long, p() As String, x As Long, m As Long, q As Integer, y As Integer, e As String, b As Integer, t As Integer
s = 325197 t = Len(Tx)
ReDim p(t - 1)
For b = 0 To t - 1 p(b) = Mid(Tx, b + 1, 1) Next b
For b = t - 1 To 0 Step -1 x = s * (b + 412) + (s Mod 21331) m = s * (b + 467) + (s Mod 43934) q = x Mod t y = m Mod t e = p(q) p(q) = p(y) p(y) = e s = (x + m) Mod 1769511 Next b
encode = Join(p, "") End Function
Du kannst diese Funktion dann verwenden, um einen Klartext zu verschlüsseln:
Code: Sub T_2() Debug.Print encode("constructor") End Sub
Das Ergebnis sollte dem ursprünglichen verschlüsselten String entsprechen. behauptet ChatGPT
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
Könnt Ihr mal auch für AD-Leser (alt und dumm) schreiben?
Registriert seit: 06.12.2015
Version(en): 2016
@LCohen:
Wenn der Code ausgeführt wird, ist das Ergbnis im Direkt-Fenster "constructor"
@Warkings:
Danke, danach kann ich suchen
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
Kann ich nichts mit anfangen. Scheint VBA-Spezies vorbehalten zu sein. Bei mir gibt es kein Fenster "constructor", und im Debug-Fenster seh ich auch nix.
Registriert seit: 29.09.2015
Version(en): 2030,5
Hier ist das Ergebnis nur ein Anagram von 'constructor'.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Musst Du nicht, LCohen! Das Direktfenster wird im VBE mittels Strg+G angezeigt. "lofwvscrdcutometnpnisktoqurgycazhjxrb" wird zu "constructor" verschlüsselt. Fennek möchte "constructor" zu "lofwvscrdcutometnpnisktoqurgycazhjxrb" entschlüsseln.
Das, was Chat-GPT da vorschlägt, ist wie erwartet Müll. Er entschlüsselt zu "otsoctrncru" was natürlich verdammt nahe an "lofwvscrdcutometnpnisktoqurgycazhjxrb" ist …
Zum Thema habe ich aber nichts zu schreiben, nicht mein Gebiet.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 06.12.2015
Version(en): 2016
Hallo, mit dem Suchwort gab es einen Treffer bei "stackoverflow". Nach VBA portiert: Code: Option Explicit ' https://stackoverflow.com/questions/3541378/reversible-shuffle-algorithm-using-a-key
Sub Start() Dim Tx As String, enc As String, dec As String
Tx = "This is the message"
enc = Shuffle(Tx) dec = deShuffle(enc) Debug.Print enc Debug.Print dec End Sub
Function Shuffle(ByVal Tx As String) As String Dim Size As Integer, Char, i As Integer, Ar, n As Integer Dim tmp As String
Size = Len(Tx) ReDim Char(Size) As String
For i = 1 To Size: Char(i - 1) = Mid(Tx, i, 1): Next i
Ar = iRND(Size, 9)
For i = Size - 1 To 0 Step -1 n = Ar(Size - 1 - i) tmp = Char(i) Char(i) = Char(n) Char(n) = tmp Next i
Shuffle = Join(Char, "") End Function
Function deShuffle(ByVal Tx As String) As String Dim Size As Integer, Char, i As Integer, Ar, n As Integer Dim tmp As String
Size = Len(Tx) ReDim Char(Size) As String
For i = 1 To Size: Char(i - 1) = Mid(Tx, i, 1): Next i
Ar = iRND(Size, 9)
For i = 0 To Size - 1 n = Ar(Size - i - 1) tmp = Char(i) Char(i) = Char(n) Char(n) = tmp Next i
deShuffle = Join(Char, "") End Function
Function iRND(ByVal Size As Integer, key As Integer) As Variant Dim rd As Integer, i As Integer, Ar
Rnd (-1) Randomize (-key) ReDim Ar(Size - 1) As Integer
For i = Size - 1 To 1 Step -1 Ar(Size - 1 - i) = Size * Rnd Next i
iRND = Ar End Function
Die Ausgangsfrage konnte ich bis jetzt nicht lösen. PS: Lästern: Wer versucht seinen Code so zu verschleiern, aber den Algorithmus direkt dazu schreibt, ist ...
|