40 lines
1 KiB
APL
40 lines
1 KiB
APL
|
|
adfgvx←{
|
|||
|
|
n←⎕NS''
|
|||
|
|
n.split←↑{⍺≥⍴⍵:⊂⍵ ⋄ (⊂⍺↑⍵),⍺∇⍺↓⍵}
|
|||
|
|
|
|||
|
|
n.enc←⍺{
|
|||
|
|
t←∊(∘.,⍨'ADFGVX')[⊃∘⍸∘(⍺⍺∘=)¨⍵]
|
|||
|
|
w←↓⍉((⍴⍵⍵)split t)[;⍋⍵⍵]
|
|||
|
|
1↓∊' ',¨w~¨' '
|
|||
|
|
}⍵
|
|||
|
|
|
|||
|
|
n.dec←⍺{
|
|||
|
|
t←↓2 split (∊(⍉↑⍵⊆⍨' '≠⍵)[;⍋⍋⍵⍵])~' '
|
|||
|
|
⍺⍺['ADFGVX'∘⍳¨t]
|
|||
|
|
}⍵
|
|||
|
|
|
|||
|
|
n
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
adfgvx_test←{
|
|||
|
|
square←6 6⍴(⎕A,⎕D)[?⍨36]
|
|||
|
|
⎕←'Polybius square:'
|
|||
|
|
⎕←' ─ADFGVX','│┼││││││','A D F G V X' ⍪'─'⍪(11⍴1 0)\square
|
|||
|
|
⎕←''
|
|||
|
|
|
|||
|
|
key←{
|
|||
|
|
file←'e:\unixdict.txt'
|
|||
|
|
dict←(~data∊⎕TC)⊆data←⊃⎕NGET file
|
|||
|
|
dict←(⍵{⍺=≢⍵}¨dict)/dict
|
|||
|
|
dict←({⍵≡∪⍵}¨dict)/dict
|
|||
|
|
1⎕C ⊃dict[?⍴dict]
|
|||
|
|
}9
|
|||
|
|
⎕←'Key: ',key
|
|||
|
|
|
|||
|
|
a←square adfgvx key
|
|||
|
|
|
|||
|
|
⎕←'Plaintext: ',plaintext←'ATTACKAT1200AM'
|
|||
|
|
⎕←'Encrypted: ',encrypted←a.enc plaintext
|
|||
|
|
⎕←'Decrypted: ',a.dec encrypted
|
|||
|
|
}
|