Playfair cipher: Difference between revisions

m
sntax highlighting fixup automation
(→‎{{header|APL}}: Add implementation)
m (sntax highlighting fixup automation)
Line 19:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">F uniq(seq)
[Char] seen
L(x) seq
Line 78:
V enc = playfair.encode(orig)
print(‘Encoded: ’enc)
print(‘Decoded: ’playfair.decode(enc))</langsyntaxhighlight>
 
{{out}}
Line 89:
=={{header|APL}}==
{{works with|Dyalog APL}}
<langsyntaxhighlight lang="apl">⍝⍝⍝⍝ Utility functions
 
⍝ convert to uppercase
Line 165:
plain ← 'Hide the gold in the tree stump.'
⎕ ← cipher ← key EncodeText plain
⎕ ← key DecodeText cipher</langsyntaxhighlight>
 
{{Out}}<pre> ⎕ ← cipher ← key EncodeText plain
Line 179:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <string>
 
Line 288:
cout << "Enter the text: "; getline( cin, txt );
playfair pf; pf.doIt( key, txt, ij, e ); return system( "pause" );
}</langsyntaxhighlight>
{{out}}<pre>
(E)ncode or (D)ecode? e
Line 312:
=={{header|D}}==
{{trans|Python}}
<langsyntaxhighlight lang="d">import std.stdio, std.array, std.algorithm, std.range, std.ascii,
std.conv, std.string, std.regex, std.typecons;
 
Line 382:
writeln(" Encoded: ", enc);
writeln(" Decoded: ", pf.decode(enc));
}</langsyntaxhighlight>
{{out}}
<pre>Original: Hide the gold in...the TREESTUMP!!!
Line 389:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Enum PlayFairOption
Line 544:
Print
Print "Press any key to quit"
Sleep</langsyntaxhighlight>
Sample input/output:
{{out}}
Line 566:
=={{header|Go}}==
{{trans|Kotlin}}
<langsyntaxhighlight lang="go">package main
 
import (
Line 773:
decodedText := pf.decode(encodedText)
fmt.Println("Deccoded text is :", decodedText)
}</langsyntaxhighlight>
 
{{out}}
Line 797:
{{incorrect|Haskell|TREESTUMP -> TREXSTUMPX, should be TREXESTUMP}}
(My guess is that map (\[x, y] -> if x == y then [x, 'x'] else [x, y]).chunksOf 2 is simply discarding the y. [[User:Petelomax|Pete Lomax]] ([[User talk:Petelomax|talk]]) 05:54, 13 October 2018 (UTC))
<langsyntaxhighlight lang="haskell">
import Control.Monad (guard)
import Data.Array (Array, assocs, elems, listArray, (!))
Line 899:
| odd (length str) = str ++ "x"
| otherwise = str
</syntaxhighlight>
</lang>
 
<pre>
Line 913:
 
'''Implementation:'''
<langsyntaxhighlight Jlang="j">choose=: verb define
sel=. 'Q' e. y
alph=: (sel { 'JQ') -.~ a. {~ 65 + i.26
Line 948:
decrypt=: verb define
, ref{~alt i. pairs y
)</langsyntaxhighlight>
 
'''Example use:'''
<langsyntaxhighlight Jlang="j"> choose 'IJ'
 
setkey 'playfair example'
Line 957:
BM OD ZB XD NA BE KU DM UI XM MO UV IF
decrypt 'BM OD ZB XD NA BE KU DM UI XM MO UV IF'
HIDETHEGOLDINTHETREXESTUMP</langsyntaxhighlight>
 
=={{header|Java}}==
<langsyntaxhighlight lang="java">import java.awt.Point;
import java.util.Scanner;
 
Line 1,063:
return text.toString();
}
}</langsyntaxhighlight>
 
=== alternative version ===
 
<langsyntaxhighlight lang="java">import java.util.Scanner;
public class PlayfairCipherEncryption
Line 1,271:
sc.close();
}
}</langsyntaxhighlight>
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">function playfair(key, txt, isencode=true, from = "J", to = "")
to = (to == "" && from == "J") ? "I" : to
 
Line 1,334:
 
println("Decoded: ", playfair("Playfair example", encoded, false))
</langsyntaxhighlight>{{out}}
<pre>
Original: Hide the gold in...the TREESTUMP!!!
Line 1,343:
=={{header|Kotlin}}==
{{trans|FreeBASIC}}
<langsyntaxhighlight lang="scala">// version 1.0.5-2
 
enum class PlayfairOption {
Line 1,475:
val decodedText = playfair.decode(encodedText)
println("Decoded text is : $decodedText")
}</langsyntaxhighlight>
 
{{out}}
Line 1,496:
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">ClearAll[MakeTranslationTable, PlayfairCipher, PlayfairDecipher]
MakeTranslationTable[tt_List] := Module[{poss, in, out},
poss = Tuples[Tuples[Range[5], 2], 2];
Line 1,567:
]
PlayfairCipher["Hide the gold in...the TREESTUMP!!!", "Playfair example"]
PlayfairDecipher[%, "Playfair example"]</langsyntaxhighlight>
{{out}}
<pre>BM OD ZB XD NA BE KU DM UI XM MO UV IF
Line 1,574:
=={{header|Nim}}==
{{trans|Java}}
<langsyntaxhighlight Nimlang="nim">import pegs, strutils
 
type
Line 1,672:
 
echo "Encoded message: ", enc
echo "Decoded message: ", dec</langsyntaxhighlight>
 
{{out}}
Line 1,682:
 
=={{header|NetRexx}}==
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref symbols nobinary
 
Line 1,847:
 
return
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,870:
 
=={{header|ooRexx}}==
<langsyntaxhighlight lang="oorexx">/*---------------------------------------------------------------------
* REXX program implements a PLAYFAIR cipher (encryption & decryption).
* 11.11.2013 Walter Pachl revamped, for ooRexx, the REXX program
Line 2,067:
d=d||substr(x,j,2)' '
End
Return strip(d)</langsyntaxhighlight>
Output (sample):
<pre>old cipher key: this is my little key
Line 2,090:
=={{header|Perl}}==
{{trans|Raku}}
<langsyntaxhighlight lang="perl">use Math::Cartesian::Product;
 
# Pregenerate all forward and reverse translations
Line 2,161:
print " orig:\t$orig\n";
print "black:\t$black\n";
print " red:\t$red\n";</langsyntaxhighlight>
{{out}}
<pre> orig: Hide the gold in...the TREESTUMP!!!
Line 2,170:
=={{header|Phix}}==
Originally translated from Kotlin, now uses a combined routine (playfair) for encoding and decoding, and direct char lookups, and x removal.
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">keyword</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"Playfair example"</span><span style="color: #0000FF;">,</span>
Line 2,284:
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Encoded text is : %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">encoded</span><span style="color: #0000FF;">})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"Decoded text is : %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">decoded</span><span style="color: #0000FF;">})</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 2,306:
=={{header|Python}}==
{{trans|Raku}}
<langsyntaxhighlight lang="python">from string import ascii_uppercase
from itertools import product
from re import findall
Line 2,367:
enc = encode(orig)
print "Encoded:", enc
print "Decoded:", decode(enc)</langsyntaxhighlight>
{{out}}
<pre>Original: Hide the gold in...the TREESTUMP!!!
Line 2,375:
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" perl6line># Instantiate a specific encoder/decoder.
 
sub playfair( $key,
Line 2,437:
 
my $red = decode $black;
say " red:\t$red";</langsyntaxhighlight>
{{out}}
<pre> orig: Hide the gold in...the TREESTUMP!!!
Line 2,453:
A fair amount of code was added to massage the decrypted encryption to remove doubled &nbsp; '''X'''es &nbsp; so as to match the original text
<br>(this is the &nbsp; &nbsp; ''possible text'' &nbsp; &nbsp; part of the REXX code).
<langsyntaxhighlight lang="rexx">/*REXX program implements a PLAYFAIR cipher (encryption and decryption). */
@abc= 'abcdefghijklmnopqrstuvwxyz'; @abcU= @abc /*literals for lower and upper ABC's.*/
parse arg omit key '(' text /*TEXT is the phrase to be used. */
Line 2,540:
if datatype(_, 'M') then $= $ || _ /*only use Latin letters. */
end /*j*/
return $</langsyntaxhighlight>
Some older REXXes don't have a '''changestr''' bif, so one is included here ──► [[CHANGESTR.REX]].
<br><br>
Line 2,593:
Printing the cipher in pairs just advertises the mechanism of encoding; I've gone with the traditional grouping into sequences of five letters instead.
 
<langsyntaxhighlight lang="ruby">class Playfair
Size = 5
def initialize(key, missing)
Line 2,646:
end.join.split('').each_slice(5).map{|s|s.join}.join(' ')
end
end</langsyntaxhighlight>
 
{{Out}}
Line 2,656:
=={{header|Sidef}}==
{{trans|Raku}}
<langsyntaxhighlight lang="ruby">func playfair(key, from = 'J', to = (from == 'J' ? 'I' : '')) {
 
func canon(str) {
Line 2,714:
 
var red = decode(black)
say " red:\t#{red}"</langsyntaxhighlight>
{{out}}
<pre>
Line 2,723:
 
=={{header|SQL}}==
<langsyntaxhighlight lang="sql">
--Clean up previous run
IF EXISTS (SELECT *
Line 3,037:
WHERE NAME = 'FairPlayTable')
DROP TYPE FAIRPLAYTABLE
</syntaxhighlight>
</lang>
 
=={{header|Tcl}}==
 
{{works with|Tcl|8.6}}
<langsyntaxhighlight lang="tcl">package require TclOO
 
oo::class create Playfair {
Line 3,127:
return $result
}
}</langsyntaxhighlight>
Demonstrating:
<langsyntaxhighlight lang="tcl">Playfair create cypher "Playfair Example"
set plaintext "Hide the gold in...the TREESTUMP!!!"
set encoded [cypher encode $plaintext]
Line 3,135:
puts "Original: $plaintext"
puts "Encoded: $encoded"
puts "Decoded: $decoded"</langsyntaxhighlight>
{{out}}
<pre>
Line 3,144:
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">
<lang vb>
Option Explicit
 
Line 3,351:
SwapPairsDecoding = myTable(resD1.Row, resD1.Column) & myTable(resD2.Row, resD2.Column)
End Select
End Function</langsyntaxhighlight>
{{out}}
<pre>Enter your keyword : Playfair example
Line 3,377:
=={{header|Vlang}}==
{{trans|Go}}
<langsyntaxhighlight lang="vlang">import os
import strings
type PlayfairOption = int
Line 3,565:
decoded_text := pf.decode(encoded_text)
println("Deccoded text is : $decoded_text")
}</langsyntaxhighlight>
 
{{out}}
Line 3,592:
{{libheader|Wren-trait}}
{{libheader|Wren-ioutil}}
<langsyntaxhighlight lang="ecmascript">import "/dynamic" for Enum
import "/str" for Str, Char
import "/trait" for Stepped
Line 3,726:
System.print("\nEncoded text is : %(encodedText)")
var decodedText = playfair.decode(encodedText)
System.print("Decoded text is : %(decodedText)")</langsyntaxhighlight>
 
{{out}}
Line 3,747:
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">fcn genKeyTable(key,deadChr){ // deadChr=="Q" or "J"
deadChr=deadChr.toUpper();
key=key.toUpper().unique() - " " - deadChr;
return(key + (["A".."Z"].pump(String) - deadChr - key), deadChr);
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">fcn playfair(text,keytable){ // text is a-z only
keyTable,deadChr:=keytable;
text=text.toUpper();
Line 3,775:
})
.pump(String,Void.Read,"".create.fp(" ")).strip(); // insert blanks
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">fcn decodePF(text,keyTable){
keyTable,_=keyTable;
text-=" ";
Line 3,792:
.pump(String,Void.Read,"".create.fp(" ")).strip(); // insert blanks
}
</syntaxhighlight>
</lang>
<langsyntaxhighlight lang="zkl">msg:="Hide the gold in the tree stump!!!";
keyTable:=genKeyTable("playfair example");
msg.println();
e:=playfair(msg,keyTable); e.println();
decodePF(e,keyTable).println();
playfair("XX",keyTable).println() : decodePF(_,keyTable).println();</langsyntaxhighlight>
{{out}}
<pre>
10,333

edits