Skip to content

Commit 5f5c903

Browse files
authored
Merge pull request #8 from marcode24/challenge-03
✨ add challenge-03 solution
2 parents 511242a + 149a4c4 commit 5f5c903

File tree

5 files changed

+603
-1
lines changed

5 files changed

+603
-1
lines changed

2023/03-cifrado-espia/README.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Reto 3: Cifrado espía
2+
3+
## Problema
4+
5+
Un grupo de espías ha descubierto que su sistema de cifrado de mensajes está comprometido.
6+
7+
Han encontrado algunas contraseñas que no cumplen con laPolítica de Seguridad de Cifrado que tenían establecida cuando fueron creadas.
8+
9+
Para solucionar el problema, han creado una lista (tu entrada al desafío) de contraseñas (según la base de datos corrupta) y la política de seguridad cuando esa clave fue establecida.
10+
11+
**Ejemplo de la lista:**
12+
13+
- 2-4 f: fgff
14+
- 4-6 z: zzzsg
15+
- 1-6 h: hhhhhh
16+
17+
Cada línea indica, separado por :, la política de la clave y la clave misma.
18+
19+
La política de la clave especifica el número mínimo y máximo de veces que un carácter dado debe aparecer para que la clave sea válida. Por ejemplo, 2-4 f significa que la clave debe contener f al menos 2 veces y como máximo 4 veces.
20+
21+
Sabiendo esto, en el ejemplo anterior, hay 2 claves válidas:
22+
23+
La segunda clave, zzzsg, no lo es; contiene 3 veces la letra z, pero necesita al menos 4. Las primeras y terceras claves son válidas: contienen la cantidad adecuada de f y h, respectivamente, según sus políticas.
24+
25+
**Tu desafío:**
26+
27+
Determina cuántas claves de cifrado son válidas según sus políticas.
28+
29+
**Cómo resolverlo**
30+
31+
1. Analiza la lista de políticas y claves de cifrado que encontrarás en este archivo: https://codember.dev/data/encryption_policies.txt
32+
33+
2. Crea un programa que devuelva la clave inválida número 42 (de todas las claves inválidas, la 42ª en orden de aparición). Por ejemplo:
34+
**submit bqamidgewtbuz**
35+
36+
## Mi Solución
37+
38+
```js
39+
const validatePasswords = (passwords) => {
40+
const validPasswords = [];
41+
const invalidPasswords = [];
42+
43+
passwords.forEach((password) => {
44+
const [policy, str] = password.split(':');
45+
const [range, letter] = policy.split(' ');
46+
const [min, max] = range.split('-');
47+
const regex = new RegExp(letter, 'g');
48+
const matches = str.match(regex);
49+
const count = matches ? matches.length : 0;
50+
51+
if (count >= min && count <= max) {
52+
validPasswords.push(str.trim());
53+
} else {
54+
invalidPasswords.push(str.trim());
55+
}
56+
});
57+
return { validPasswords, invalidPasswords };
58+
};
59+
```
60+

0 commit comments

Comments
 (0)