0votos

ALgoritmo de encriptacion afin en java en Haskell

por josejuan hace 3 años

Básicamente es usar la definición (ej. de wikipedia). Se construye un cifrado (encriptador y desencriptador) y se aplica para cifrar textos con cualquier secuencia Unicode. Además, se testea automáticamente con QuickCheck.

progrma en java que haga una encriptacion con el algoritmo afin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import Data.List (elemIndex) 
import Zora.Math (multiplicative_inverse, coprime) 
import Data.Maybe (fromJust) 
 
-- Construye un cifrado (encriptación y desencriptación) indicando alfabetos y constantes 
mkCipher :: String → String → Int → Int → (String → String, String → String) 
mkCipher m c a b = 
  let (w, n) = (length m, length c) 
      i = fromJust $ multiplicative_inverse a w 
      (<%) = (fromJust ∘ ) ∘ elemIndex 
  in  (map (λx → c‼((a * x <% m + b) `mod` n)), map (λy → m‼((i * abs(y <% c - b)) `mod` w))) 
 
-- Y ya está. 
 
 
 
 
 
-- Por ejemplo, podemos definir una encriptación para cualquier símbolo Unicode 
(enc, dec) = mkCipher α (reverse α) (head $ filter (coprime s) [1…]) 2 
             where α = enumFromTo minBound maxBound 
                   s = length α 
 
-- Entonces, podemos encriptar algo como: 
-- > print $ enc "esto es un simple texto" 
-- > "\1114008\1113994\1113993\1113998\1114077..." 
 
-- En el que se cumple 
-- > print $ dec $ enc "esto es un simple texto" 
-- "esto es un simple texto" 
 
-- En concreto, podemos lanzar tests automatizados para verificar la propiedad de reversibilidad 
-- > :m + Test.QuickCheck 
-- > quickCheckWith (stdArgs { maxSuccess = 100000 }) (\xs -> xs == (dec . enc) xs) 
-- +++ OK, passed 100000 tests. 
2 comentarios
0votos

Escrito por Raul GM hace 3 años

Hola josejuan,

¡Llebas siglos siendo Top 1! No has parado desde que empezó la página.

¡Menudo crack!

En mi caso, espero volver, practicando TDD. Así que nos vamos viendo :D
0votos

Escrito por josejuan hace 3 años

:D gracias, pero no tiene ninguna relevancia, soy el top1 porque me gusta resolver cualquier problema que se pone por delante (como si de crucigramas se tratara), es decir, más por pesado que otra cosa xD xD ¡Un saludo!

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.