fix utf8
This commit is contained in:
parent
80737d5a6a
commit
fc81c9e6d0
45 changed files with 169 additions and 178 deletions
|
|
@ -1,3 +1,3 @@
|
|||
Implement a [[wp:Caesar cipher|Caesar cipher]], both encryption and decryption. The key is an integer from 1 to 25. This cipher rotates the letters of the alphabet (A to Z). The encryption replaces each letter with the 1st to 25th next letter in the alphabet (wrapping Z to A). So key 2 encrypts "HI" to "JK", but key 20 encrypts "HI" to "BC". This simple "monoalphabetic substitution cipher" provides almost no security, because an attacker who has the encrypted message can either use frequency analysis to guess the key, or just try all 25 keys.
|
||||
|
||||
Caesar cipher is identical to [[Vigenère cipher]] with key of length 1. Also, [[Rot-13]] is identical to Caesar cipher with key 13.
|
||||
Caesar cipher is identical to [[Vigenère cipher]] with key of length 1. Also, [[Rot-13]] is identical to Caesar cipher with key 13.
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ y=caesar(p, key) ; say ' cyphered:' y
|
|||
z=caesar(y,-key) ; say ' uncyphered:' z
|
||||
if z\==p then say "plain text doesn't match uncyphered cyphered text."
|
||||
exit /*stick a fork in it, we're done.*/
|
||||
/*ââââââââââââââââââââââââââââââââââCAESAR subroutineâââââââââââââââââââ*/
|
||||
/*──────────────────────────────────CAESAR subroutine───────────────────*/
|
||||
caesar: procedure; parse arg s,k; @='abcdefghijklmnopqrstuvwxyz'
|
||||
@=translate(@)@'0123456789(){}[]<>' /*add uppercase, digs, group symb*/
|
||||
@=@'~!@#$%^&*_+:";?,./`-= ''' /*add other characters here. */
|
||||
|
|
@ -19,5 +19,5 @@ if _\==0 then call err 'unsupported character:' substr(s,_,1)
|
|||
if k>0 then ky=k+1
|
||||
else ky=L+1-ak
|
||||
return translate(s,substr(@||@,ky,L),@)
|
||||
/*ââââââââââââââââââââââââââââââââââERR subroutineââââââââââââââââââââââ*/
|
||||
/*──────────────────────────────────ERR subroutine──────────────────────*/
|
||||
err: say; say '***error!***'; say; say arg(1); say; exit 13
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ y=caesar(p, key) ; say ' cyphered:' y
|
|||
z=caesar(y,-key) ; say ' uncyphered:' z
|
||||
if z\==p then say "plain text doesn't match uncyphered cyphered text."
|
||||
exit /*stick a fork in it, we're done.*/
|
||||
/*ââââââââââââââââââââââââââââââââââCAESAR subroutineâââââââââââââââââââ*/
|
||||
/*──────────────────────────────────CAESAR subroutine───────────────────*/
|
||||
caesar: procedure; arg s,k; @='ABCDEFGHIJKLMNOPQRSTUVWXYZ'; L=length(@)
|
||||
ak=abs(k)
|
||||
if ak > length(@)-1 | k==0 | k=='' then call err k 'key is invalid'
|
||||
|
|
@ -18,5 +18,5 @@ if _\==0 then call err 'unsupported character:' substr(s,_,1)
|
|||
if k>0 then ky=k+1 /*either cypher it, or ... */
|
||||
else ky=27-ak /* decypher it. */
|
||||
return translate(s,substr(@||@,ky,L),@)
|
||||
/*ââââââââââââââââââââââââââââââââââERR subroutineââââââââââââââââââââââ*/
|
||||
/*──────────────────────────────────ERR subroutine──────────────────────*/
|
||||
err: say; say '***error!***'; say; say arg(1); say; exit 13
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue