Stap 5: Testen de one-time-pad
De one-time-pad is de eenvoudigste van alle encryptie methoden. Duurt de invoertekst (platte-tekst) en met behulp van Bitsgewijze XOR combineert dit met een andere ingang (sleutel).
Als de sleutel willekeurig, zo lang of langer dan de platte-tekst is en de sleutel wordt alleen ooit eens gebruikt dan is de codering, in theorie, onbreekbaar.
Tekst zonder opmaak xor sleutel == > Cipher-tekst
Cipher-tekst xor sleutel == > tekst zonder opmaak
Laten we beginnen:
Plain-text = "Mmm. Ik hou van schildpadden. "
Key = "This_is_for_me_to_know"
--------------------------------------------
Cipher = "y E D-y < h (O E 5 C. EEN F 4 7 O J 9}"
Key = "This_is_for_me_to_know"
--------------------------------------------
Plain-text = "Mmm. Ik hou van schildpadden."
Dus het werkt voor rechte one-time-pad codering, maar het duurde een tijdje. Ik had het programma te draaien op elk karakter van de-toets plus de platte-tekst en dan had ik die dan vervolgens samenstelt. Ik denk dat het beter zou zijn als ik schreef sommige code om dit te doen voor mij.
----
#! / bin/bash
kat test.txt | awk ' BEGIN {}
CHK = 0
CNT = 1
terwijl (getline < "wheel.txt" > 0)
{
n [CNT] = $0; Ik [$0] = CNT; CNT ++
}
Mylen = CNT-1; mymax = CNT-2
Close("Wheel.txt")
}
{
CNT = 1
terwijl (CNT < = 80)
{
if(CHK==0)
{
result[cnt]=substr($0,cnt,1)
}
if(CHK!=0)
{
Xin=substr($0,cnt,1)
Yin = resultaat [CNT]
Pos1 = i [Xin]
pos2 = i [Yin]
if(Pos1==0) pos1 = 1
if(pos2==0) pos2 = 1
posx = 95-pos1-pos2
Als (posx < = 0) posx = posx + 96
Als (posx < = 0) posx = posx + 96
Als (posx < = 0) posx = posx + 96
resultaat [CNT] = n [posx]
}
CNT ++
}
CHK = 1
}
EINDE {}
UIT = ""
CNT = 1
terwijl (CNT < = 80)
{
UIT = resultaat [CNT]
CNT ++
}
uitprinten
}'
----
Mijn andere probleem is dat one-time-pad is te eenvoudig en heeft de beperking van niet zijnde kundig voor hergebruik van de sleutel. Ik wil een methode waar dezelfde sleutel zal niet haar geheimen zo gemakkelijk geven.
.