Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
51
Task/Chaocipher/EMal/chaocipher.emal
Normal file
51
Task/Chaocipher/EMal/chaocipher.emal
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
type Chaocipher:Mode
|
||||
enum
|
||||
int ENCRYPT, DECRYPT
|
||||
end
|
||||
type Chaocipher
|
||||
text L_ALPHABET = "HXUCZVAMDSLKPEFJRIGTWOBNYQ"
|
||||
text R_ALPHABET = "PTLNBQDEOYSFAVZKGJRIHWXUMC"
|
||||
fun exec = text by text value, Chaocipher:Mode mode, logic showSteps
|
||||
^|since texts are mutable, we can operate directly on them without the need of Lists|^
|
||||
text left = *L_ALPHABET # by using the valueOf operator we are sure that the string is copied
|
||||
text right = *R_ALPHABET
|
||||
text eText = text(" ", value.length)
|
||||
text temp = text(" ", 26)
|
||||
for int i = 0; i < value.length; ++i
|
||||
if showSteps do writeLine(left + " " + right) end
|
||||
int index = 0
|
||||
if mode == Chaocipher:Mode.ENCRYPT
|
||||
index = right.find(value[i])
|
||||
eText[i] = left[index]
|
||||
else
|
||||
index = left.find(value[i])
|
||||
eText[i] = right[index]
|
||||
end
|
||||
if i == value.length - 1 do break end
|
||||
# permute left
|
||||
for int j = index; j < 26; ++j do temp[j - index] = left[j] end
|
||||
for int j = 0; j < index; ++j do temp[26 - index + j] = left[j] end
|
||||
var store = temp[1]
|
||||
for int j = 2; j < 14; ++j do temp[j - 1] = temp[j] end
|
||||
temp[13] = store
|
||||
left = *temp
|
||||
# permute right
|
||||
for int j = index; j < 26; ++j do temp[j - index] = right[j] end
|
||||
for int j = 0; j < index; ++j do temp[26 - index + j] = right[j] end
|
||||
store = temp[0]
|
||||
for int j = 1; j < 26; ++j do temp[j - 1] = temp[j] end
|
||||
temp[25] = store
|
||||
store = temp[2]
|
||||
for int j = 3; j < 14; ++j do temp[j - 1] = temp[j] end
|
||||
temp[13] = store
|
||||
right = *temp
|
||||
end
|
||||
return eText
|
||||
end
|
||||
var plainText = "WELLDONEISBETTERTHANWELLSAID"
|
||||
writeLine("The original plaintext is : " + plainText)
|
||||
writeLine(EOL + "The left and right alphabets after each permutation during encryption are :" + EOL)
|
||||
var cipherText = exec(plainText, Chaocipher:Mode.ENCRYPT, true)
|
||||
writeLine(EOL + "The ciphertext is : " + cipherText)
|
||||
var plainText2 = exec(cipherText, Chaocipher:Mode.DECRYPT, false)
|
||||
writeLine(EOL + "The recovered plaintext is : " + plainText2)
|
||||
Loading…
Add table
Add a link
Reference in a new issue