WN

WN (https://www.wn.se/forum/index.php)
-   Allmänt (https://www.wn.se/forum/forumdisplay.php?f=2)
-   -   Knäcka en krytering (https://www.wn.se/forum/showthread.php?t=1068824)

naak2803 2017-12-16 14:45

Knäcka en krytering
 
Vi gick från vänster till höger i vårt okrypterade meddelande. För varje tecken tog vi dess ASCII-värde och adderade med nästa teckens ASCII-värde. Dessa summor stoppade vi in i listan som du ser nedan.

Kod:

173,207,138,137,208,204,211,143,65,118,191,137,134,348,360,229,231,227,211,132,129,213,232,148,132,201,217,
148,137,215,226,217,133,147,222,224,225,216,209,133,150,215,211,211,129,142,339,332,217,211,129,144,226,225,
209,206,209,210,141,134,348,360,146,132,205,208,136,65,118,191,137,140,219,229,215,197,201,133,138,223,149,
129,213,232,148,135,204,133,142,339,332,217,211,129,147,224,338,261,148,221,217,227,147,148,221,213,216,140,
132,205,215,142,129,207,225,361,353,204,207,156,78,100,169,217,148,134,348,360,229,231,213,129,150,223,137,
148,237,220,206,208,215,146,132,217,149,147,222,204,129,135,349,360,211,129,260,342,146,129,213,232,148,136

Det går väl inte att lösa... det kan ju finnas flera summor som tex gör upp 173 (första tecknet), eller? tänker jag fel?

habbcraw 2017-12-16 15:08

Det räcker väl att skapa alla adderade ASCII-värden och koppla det till dess två tecken. Sedan kommer det finnas två möjliga kombinationer för varje värde. Eftersom du lägger till nästkommande värde med nuvarande kommer det räcka med att börja anta 1 av de 2 möjliga kombinationerna på slutet och försöka avkryptera. En av avkrypteringarna kommer vara meddelandet, dessutom om du har udda antal ASCII tecken kommer man direkt fram till meddelandet. Jag kan ha fel. Vad tror ni?

naak2803 2017-12-16 15:30

nu hängde jag inte med... så hur skulle du göra för att avkryptera första 5 tecken?

naak2803 2017-12-16 15:46

hur skulle en sån algoritm se ut?

habbcraw 2017-12-16 15:59

Jag har nog fel. Det går inte att knäcka det, jag kan inte komma på hur iaf. Däremot så kommer flera krypterade meddelanden ha samma krypteringskod, vilket kan bli problematiskt?

Stefan Johansson 2017-12-16 16:02

Det går att lösa genom att ställa upp ett linjärt ekvationssystem, eftersom det (i princip) finns lika många ekvationer som obekanta. Det enda man måste göra är att gissa vilket tecken som har adderats till det sista i den följd du har fått.

Stefan Johansson 2017-12-16 16:09

Om man testar att lösa ekvationssystemet för alla möjliga adderade tecken (för det sista tecknet) så finns det 19 möjliga utfall där alla "dekrypterade" tecken ligger inom spannet (0-255), varav bara ett ger en sträng som går att läsa:
---------------------------------------------
Hej igen! Vi förstod att det inte skulle vara några problem för dig! Vi lovade ju att ge några små tips till din ansökan. Det första vi tycker du ska göra är att
---------------------------------------------

naak2803 2017-12-16 17:08

du har inte lust att dela med dig denna linjära ekvationssystem.

Stefan Johansson 2017-12-16 17:26

Om du tänker att du ger alla tecken i strängen en egen variabel, t.ex. abcd... Då kan du ställa upp en ekvation för varje "summa", och får då ett ekvationssystem:

a + b = 173
b + c = 207
c + d = 138
..o.s.v.

För de tre ekvationerna ovan så kan du lösa systemet om du t.ex. listar ut vad "d" är:

c = 138 - d
b = 207 - c = 207 - (138 - d)
a = 173 - b = 173 - (207 - (138 - d))

På samma sätt kan man lösa det system som du har, som består av ~160 sådana ekvationer.

nim 2017-12-18 11:50

Och vad kan man lära sig här?

Jo, skapa inte egna krypteringsalgoritmer utan använd välbeprövade såsom 3DES, RSA, Blowfish, Twofish eller AES. Och dessa i kombination med salt

Conny Westh 2017-12-18 13:10

Citat:

Ursprungligen postat av nim (Inlägg 20525123)
Och vad kan man lära sig här?

Jo, skapa inte egna krypteringsalgoritmer utan använd välbeprövade såsom 3DES, RSA, Blowfish, Twofish eller AES. Och dessa i kombination med salt

Håller med om detta.

Det är bättre att använda exempelvis AES 256 bitars krypering och AES använder en publik och en privat nyckel för både sändare och mottagare.

Jag har testat det och det verkar vara helt ok att använda, finns inbyggt i .NET-plattformen och finns nog i många andra plattformar oxo, Det är testat av många som ännu inte lyckats knäcka det vad jag vet.

Stefan Johansson 2017-12-18 14:26

Citat:

Ursprungligen postat av nim (Inlägg 20525123)
Och vad kan man lära sig här?

Jo, skapa inte egna krypteringsalgoritmer utan använd välbeprövade såsom 3DES, RSA, Blowfish, Twofish eller AES. Och dessa i kombination med salt

Citat:

Ursprungligen postat av Conny Westh (Inlägg 20525127)
Håller med om detta.

Det är bättre att använda exempelvis AES 256 bitars krypering och AES använder en publik och en privat nyckel för både sändare och mottagare.

Jag har testat det och det verkar vara helt ok att använda, finns inbyggt i .NET-plattformen och finns nog i många andra plattformar oxo, Det är testat av många som ännu inte lyckats knäcka det vad jag vet.

Fast det här var väl inte ens ett försök att skapa en egen krypteringsalgoritm? Som jag ser det handlar det bara om en "kluring" som skall försöka lösas, antagligen i samband med någon jobbansökan eller liknande.

frisko 2017-12-18 17:34

Jag är verkligen ingen duktig programmerare, men detta var en rolig "kluring" att öva lite på. Här är min lösning i Python:

PHP-kod:

chars = [173,207,138,137,208,204,211,143,65,118,191,137,134,348,360,229,231,227,211,132,129,213,232,148,132,201,217148,137,215,226,217,133,147,222,224,225,216,209,133,150,215,211,211,129,142,339,332,217,211,129,144,226,225209,206,209,210,141,134,348,360,146,132,205,208,136,65,118,191,137,140,219,229,215,197,201,133,138,223,149129,213,232,148,135,204,133,142,339,332,217,211,129,147,224,338,261,148,221,217,227,147,148,221,213,216,140132,205,215,142,129,207,225,361,353,204,207,156,78,100,169,217,148,134,348,360,229,231,213,129,150,223,137148,237,220,206,208,215,146,132,217,149,147,222,204,129,135,349,360,211,129,260,342,146,129,213,232,148,136]

0

def decrypt
( list, inext ):

    if 
len( list ):
        return
        
    if list[-
i] - ordnext ) < or list[-i] - ordnext ) > 255:
        
del decrypted[:]
        return
    
    
char chr( list[-i] - ordnext ) )
    
decrypted.appendchar )
    
decrypt( list, i+1char )
    
for 
ascii in range(0,255):
    
decrypted = []
    
decryptchars1chrascii ) )

    if 
decrypted:
        
n+1
        
print( str) + ':' )
        print( 
''.join( list( reverseddecrypted ) ) ) )
        print() 

Resultat:

https://cdn-01.minfil.org/4dccoed4b1...4949/Crypt.PNG


Alla tider är GMT +2. Klockan är nu 17:59.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson