39 lines
1 KiB
APL
39 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
|
||
}
|