Problem bei der Dechiffrierung mit Matrixmultiplikation und ASCII Umwandlung?

1 Antwort

das Problem ist Dein Modulo!

Modulo ermittelt Rest einer ganzzahligen Division. das eigentliche Ergebnis der Division geht jedoch verloren.

9 % 10 = 9
19 % 10 = 9

aus dem Ergebnis "9" kann man jedoch nicht auf die Ursprünglichen Werte zurückführen.

Um binäre Daten reversibel ohne "Sonderzeichen" als String zu speichern oder darzustellen verwende Base64.

Zu Deinen Werten

wieso hat Dein Input 3 Ausrufezeichen und einen Zeilenvorschub? ...während dein String nur eines hat?

'Hallo Welt!' = [72,97,108,108,111,32,87,101,108,116,33]

und dein Key [83, 105, 103,109, 97, 32 ,66, 111, 121] ist "Sigma Boy" und nicht "ABCDEFGHI"

...na egal einen alten Trapper kann man nicht in die Flinte pissen😅

das gravierendste Problem an deiner Verschlüsselung durch Multiplikation ist das Du das Du die Ergebnisse irgendwie wieder in einen Bereich von 0..255 bringen musst ohne Verluste zu erleiden.

Modulo ist verlustbehaftet!

Statt de Multiplikation würde ich Dir XOR-Verknüpfung empfehlen:

72 ^ 65 = 9
9 ^ 65 = 72

Verknüpft man Byte Mit Byte bleibt auch das Ergebnis ein Byte.

Ich bin kein Pythonprogrammierer, deshalb eine keine Demo in Powershell:

$Input='Hallo Welt!'
$InputBytes=[Byte[]][Char[]]$Input
$InputBytes -join ','
''
  # Passwort zu ByteArray
$PasswortBytes=[Byte[]][Char[]]'ABCDEFGHI'
$PasswortBytes
''
$BinaryResult=@() #leeres Array
$i=0;
  #XOR des Strings reihum mit den Elementen von $PasswortBytes
foreach ($Byte in $InputBytes){
    #modulo des fortlaufenden Index (implizit erhöht) mit der Anzahl der Zeichen im Passwort
    $PWIndex=$i++ % $PasswortBytes.length;
    #Bytes  XOR-verknüpfen
    $BinaryResult += $Byte -bxor $PasswortBytes[$PWIndex]
}


$BinaryResult
#convert zu Base64-String 
$StringResult=[Convert]::ToBase64String($BinaryResult)
$StringResult


Write-Host Rolle Rueckwaerts -fo green
$DecodeBinary=[Convert]::FromBase64String($StringResult)
$DecodeBinary
''
$DecodeResult=@()
#XOR ist  "Symetrisch" also  einfach  nochmal  mit den PasswortBytes verknüpfen
$i=0;
foreach ($Byte in $DecodeBinary){
    $PWIndex=$i++ % $PasswortBytes.length;
    $DecodeResult += $Byte -bxor $PasswortBytes[$PWIndex]
}
$DecodeResult
''
[Char[]]$DecodeResult -join ''
Pause