voici l'algo c'est écrit en Python :
import hashlib
import re
UPPER = "ACDFGHJMNPRSTUWXY"
LOWER = "abcdfghjkmpstuwxy"
DIGIT = "2345679"
SYMBOL = "!@$&%"
def _mod(v: int, m: int) -> int:
return v % m
def mac_to_pass(mac: str) -> str:
"""Generate Fiberhome HG6145F1 (Algeria) admin password from MAC address"""
if not re.fullmatch(r"([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}", mac):
return "Invalid MAC format (expected XX:XX:XX:XX:XX:XX)"
md5 = hashlib.md5()
md5.update(mac.encode())
md5.update(b"AEJLY")
digest = md5.hexdigest()
vals = []
for c in digest[:20]:
if "0" <= c <= "9":
vals.append(ord(c) - ord("0"))
elif "a" <= c <= "f":
vals.append(ord(c) - ord("a") + 10)
elif "A" <= c <= "F":
vals.append(ord(c) - ord("A") + 10)
else:
vals.append(0)
password = [""] * 16
for i in range(16):
v = vals[i]
sel = _mod(v, 4)
if sel == 0:
password[i] = UPPER[(v * 2) % 17]
elif sel == 1:
password[i] = LOWER[(v * 2 + 1) % 17]
elif sel == 2:
password[i] = DIGIT[6 - (v % 7)]
else:
password[i] = SYMBOL[4 - (v % 5)]
positions = [
_mod(vals[16] + 1, 16),
_mod(vals[17] + 1, 16),
_mod(vals[18] + 1, 16),
_mod(vals[19] + 1, 16),
]
used = set()
for i, p in enumerate(positions):
while p in used:
p = _mod(p + 1, 16)
used.add(p)
positions[i] = p
password[positions[0]] = UPPER[(vals[16] * 2) % 17]
password[positions[1]] = LOWER[(vals[17] * 2 + 1) % 17]
password[positions[2]] = DIGIT[6 - (vals[18] % 7)]
password[positions[3]] = SYMBOL[4 - (vals[19] % 5)]
return "".join(password)
if __name__ == "__main__":
mac = input("Enter MAC address (XX:XX:XX:XX:XX:XX): ").strip()
password = mac_to_pass(mac)
print("Generated password:", password)