Sha256: b30102fdfb98c9a28333adce9ab7f452cab2acaf8b09e11c361498cef39ec069
Contents?: true
Size: 1.26 KB
Versions: 13
Compression:
Stored size: 1.26 KB
Contents
module SimpleCipher open System let private letters = ['a'..'z'] let private keyLength = 100 let private random = System.Random() let private generateKey() = let numberOfLetters = List.length letters Array.init keyLength (fun _ -> List.item (random.Next(numberOfLetters)) letters) |> String let private isInvalidKey key = Seq.length key = 0 || not (Seq.forall (fun c -> List.contains c letters) key) let private modulo x y = ((x % y) + y) % y let private charToInt (c:char) = (int c) - (int 'a') let private intToChar (i:int) = (char)((int 'a') + (modulo i 26)) let private shiftChar operation key char = operation (charToInt char) (charToInt key) |> intToChar let shift operation (key:string) (input:string) = input |> Seq.mapi (fun i c -> shiftChar operation key.[i % key.Length] c) |> Seq.toArray |> String let encode key input = shift (+) key input let decode key input = shift (-) key input type SimpleCipher(key: string) = do if isInvalidKey key then invalidArg "key" "Invalid key" member __.Key with get() = key member __.Encode(plaintext: string) = encode key plaintext member __.Decode(ciphertext: string) = decode key ciphertext new() = SimpleCipher(generateKey())
Version data entries
13 entries across 13 versions & 1 rubygems