DESCARGAR
alf:"abcdefghijklmnñopqrstuvxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ .,:áéíóúÁÉÍÓÚ";
mensajes_cif:["sqmzrkñbkmjrb númjbSSbkmÓúgcrqmqkñCkmjúWúmbrkqñqt","óyFIy,óItyAItAIyxIh,tÑyóyFÚyR,byN,yCIyC,rcG",
"MdrYBYKg.YKbWEKWRWEKEYKPYKt.oGYrdzKÚWbdNW"," VíeybKbVifbVflVtbÑQV:bVKbyyeyeVTeVtQKeÍ","DLRLódLÓfXóyfXóSLXfXórXdgÍóyyrÍfXóÓróRFófyRf","JAJKpJóflJfcgóf.Fógó fccJXgflJcfgcAgfAogD","ÚhPE zdhqyZqdíZÍzgqFZqhPZÉZdqhqiEqhUihg","NDScDYiVcfcnDiDziDYiziÑViDáczivfsztiú",
"LsOyCxíjxOñCjiXnOñjddjxOcOsxíYxOñnNnOXDxíjiísk","Ñ KHgmH xhuh tTKJmúÉhgKÚukóÁUhHk Kú kóóTVVhA","RÓd ÓbÁ QÓj Qj ÓA fbQsÓÁÓdCÓObNÓUbÓtÓlAGlUNlÉ",
"ÍWPmZdkyodkZdkOmeedkOÁHkdekúedHOúÁkIozÁé","UñmnItvAHtvVtvPnÓWtvVnIÓBñsvX:svVHvÉBWtsXB:","íBñqXIíXpXIYfñIBápNñqñmIgópNBLIíXpXIYfIñfóBBXx",
"gx.pTbRÓRTfoTéRbH.GTboffoúoTVTbRépj.foúoN","mtéAíXeRkíMéeAéheéeAxDeXXpZéxpRéXe:pRMéléAeRkíXXM,","TzKLqELudOdtGCGJGKqdsGDGdKzdyMrzuJqKdDMuJLGe",
"ZproFrgrxOroMpYApCMTzo:proTApOéTroxrTYrpt","jB,:ÓtIBsY,gU,SBsY,gU,BT,BMh,BctB:,sBLy,UÓtK"] $
claves:[[4,1],[8,2],[12,3],[16,4],[20,5],[24,6],[28,7],[32,8],[36,9],[40,10],[44,11],[48,12],[52,13],[56,14],[60,15],[64,16],[1,17],[5,18],[9,19]];
codi_numerica(alf,msj):=block(
[extra],
if stringp(msj) then extra:makelist(sposition(charat(msj,i),alf)-1,i,1,slength(msj))
else
(
extra:"",
for i in msj do extra:concat(extra,alf[i])
),
extra
)$
clave_descifrado(clave, alf):=block(
[modulo, descifrado],
modulo:slength(alf),
descifrado:[mod(inv_mod(clave[1], modulo),modulo), mod(-inv_mod(clave[1], modulo)*clave[2], modulo)]
);
clave_descifrado(claves[1], alf);
descodificar(alfabeto, mensaje, clave_cif):=block(
[mensaje_numeros, clave_descif, descif, modulo, msg],
modulo:slength(alfabeto),
mensaje_numeros:codi_numerica(alfabeto, mensaje),
clave_descif:clave_descifrado(clave_cif, alfabeto),
descif:makelist(mod(clave_descif[1]*mensaje_numeros[i]+clave_descif[2],modulo) ,i,1,length(mensaje_numeros)),
msg:codi_numerica(alfabeto, descif),
msg
);
descodificar(alf, mensajes_cif[17], claves[17]);
codificar(alfabeto, mensaje, clave_cif):=block(
[mensaje_numeros, cif, modulo, msg],
modulo:slength(alfabeto),
mensaje_numeros:codi_numerica(alfabeto, mensaje),
cif:makelist(mod(clave_cif[1]*mensaje_numeros[i]+clave_cif[2],modulo) ,i,1,length(mensaje_numeros)),
msg:codi_numerica(alfabeto, cif),
msg
);
mensaje2:"Los españoles muy españoles y mucho españoles";
clavee:[3,10];
codificar(alf, mensaje2, clavee);