Advertisement
Keraxel

Crypto F#

Aug 8th, 2015
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.75 KB | None | 0 0
  1. module CryptoTwo
  2.  
  3. open System
  4. open System.Text
  5.  
  6. let base64String = "PAADREshCgcRDgZPBAoPSxgGBBEOAR0ABksVEUUeDw4YCksoBlQWAg5PBgoRGBUNAxkEGBUGS
  7. x8KGkUfDgQHEUVLIgEWAgoDVAoFSw0NBksFBhEGBEsLGBARGBUNSUsKDQ1FBgQVGAwcDk8WHA
  8. cETwQXEQ4fBgocCgsOAAUCClQADQ4EABwcBQoTCksKGxUOHkVPOQoRDk8eABgRDA4ASx8dGwY
  9. DDk8EBA8PBhoCHksVEQcSSwEdAEsJFhgKSxEOVBEZHgsaCkVLIB9JSw0DFQIKSxsbRTkkNSMk
  10. JzQUNQkCCAo9FiIGHwYAGBgKEBg="
  11.  
  12. let isSome o =
  13.     match o with
  14.     | None -> false
  15.     | _ -> true
  16.  
  17. let decodeBase64 (base64String:string) =
  18.     ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(base64String))
  19.  
  20. let xorStringWithSingleByte (string1:string) (singleByte:byte) =
  21.     Encoding.ASCII.GetBytes(string1)
  22.     |> Seq.map (fun x -> Convert.ToChar(x ^^^ singleByte).ToString())
  23.     |> Seq.reduce (+)
  24.  
  25. //let reduct acc b =
  26. //    xorStringWithSingleByte acc b
  27.  
  28. let xorStringWithPassword(string1:string) (password:string) =
  29.     password
  30.     |> Seq.map (fun x -> Convert.ToByte(x))
  31.     |> Seq.fold xorStringWithSingleByte string1
  32.  
  33. let checkWordInCandidateString (word:string) (candidateString:string) =
  34.     match word with
  35.     | word when candidateString.Contains(word) -> Some candidateString
  36.     | _ -> None
  37.  
  38. let result (l:string list) =
  39.     match l with
  40.     | l when l.IsEmpty -> ["Brak rozwiązań"]
  41.     | l -> l
  42.  
  43. let decryptByFindingWord (word:string) (decodedString:string) =
  44.     ["dupa";"cycki"]
  45.     |> List.map (xorStringWithPassword decodedString)
  46.     |> List.map (checkWordInCandidateString word)
  47.     |> List.filter isSome
  48.     |> List.map (fun x -> x.Value)
  49.     |> result
  50.     |> List.find (fun x -> true)
  51.  
  52. let findSolution =
  53.     base64String
  54.     |> decodeBase64
  55.     |> decryptByFindingWord "ROZWAL"
  56.  
  57.  
  58. let main argv =
  59.     printfn "%s" findSolution
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement