Skip to content

Instantly share code, notes, and snippets.

@RicardoLara
Created February 22, 2018 05:37
Show Gist options
  • Save RicardoLara/411baf58bbba5ce275f1e4eccdad76f4 to your computer and use it in GitHub Desktop.
Save RicardoLara/411baf58bbba5ce275f1e4eccdad76f4 to your computer and use it in GitHub Desktop.
Sds_P1_01 v0.1
#include <bits/stdc++.h>
using namespace std;
//El tamaño de ArrAux se puede reducir al: Numero de factores primos de un numero Q.
int ArrAux[1000]; //Obvio Q seria el tamaño del alfabeto :v
int factP(int n){
int Arri=0, aux=2;
//Tomamos los facotres primos de N
while(aux <= n){
if(n%aux == 0){
ArrAux[Arri++] = aux;
n/=aux; //#Reduccion del numero :v
//Los metemos a ArrAux para eliminar sus multiplos posteriormente
}
aux++;
}
return Arri;
}
//Funcion para ver si existe una Letra L en el alfabeto, tal que si sí existe regresa su indice, sino, -1
int existe(char Alfa[], int num, char x){
for(int i=0; i<num; i++)
if(Alfa[i] == x)
return i;
return -1;
}
int main(){
int num,AA,BA;
bool band;
printf("Cantidad de letras en el alfabeto parfavar: "); scanf("%d",&num);
int index = factP(num);
int aux,i,j,Zn[num];
int ZNind = 0;
for(i=1; i<num; i++){
band = true;
for(j=0; j<index; j++)
if(i%ArrAux[j] == 0)
band = false;
if (band)
Zn[ZNind++] = i;
}
printf("Z*(%d) tiene %d elementos: \n",num,ZNind);
index = 1; int Inversos[ZNind];
Inversos[0] = 1; //Ponemos los dos datos de los extremos de la tabla
Inversos[ZNind-1] = num-1;
for(i=1; i<ZNind-1; i++)
for(j=1; j<ZNind-1; j++)
if(Zn[i]*Zn[j] % num == 1)
Inversos[index++] = Zn[j];
printf("Tabla de Inversos\n");
for(i=0; i<ZNind; i++)
printf("|\t%d\t|\t %d\t|\n", Zn[i],Inversos[i]);
if(num < 26) printf("Sorry Bruh! Alfabeto <= 26 la prox :v\n");
else{
char Alfa[num];
for(i = 65; i<91; i++){
Alfa[i-65] = i;
}
if(num > 26){
char caracter;
index = 26;
printf("Gimme los caracteres extras plox: \n");
for(i=0; i<num-26; i++){
printf("Caracter extra: "); scanf(" %c",&caracter);
// VERIFICAR QUE NO EXISTA EL CARACTER EN EL ALFABETO
Alfa[index++] = caracter;
}
}
printf("Alfabeto: \n");
for(i=0; i<num; i++) printf("%c, ",Alfa[i]);
printf("\nVas bien :v Ahora dame A y B: ");
scanf("%d",&AA); scanf("%d",&BA);
band = false;
for(i=0; i<ZNind; i++)
if(AA == Zn[i]) band = true;
if(band) printf("Datos chidos :v\n\n");
else {
printf("Sorry Bruh!, A no tiene InvMult\n");
return 0;
}
//Abrimos el archivo y contamos los caracteres
string line;
ifstream inMyStream ("Texto.txt");
int fl=0; char current_char;
printf("TEXTO ORIGINAL: \n");
if (inMyStream.is_open())
while(inMyStream.get(current_char)){
if(current_char == EOF) break;
printf("%c",current_char);
fl++;
}
printf("\n");
inMyStream.clear();
inMyStream.seekg(0, ios::beg);
//To Encrypt
char cif[fl]; i=0;
printf("-----------------------\n");
if (inMyStream.is_open())
while(inMyStream.get(current_char)){
if(current_char == EOF) break;
int indLetra = existe(Alfa, num, current_char);
if( indLetra != -1){
int k = (indLetra * AA + BA) % num;
cif[i++] = Alfa[k];
}
else cif[i++] = current_char;
}
inMyStream.close();
printf("TEXTO CIFRADO: [ Ek (Mi) = ( %d * Mi + %d) mod %d ]\n",AA,BA,num);
for(i=0; i<fl; i++) printf("%c",cif[i]);
printf("\n-----------------------\n");
//To Decrytp
int inv;
for(j=0; j<ZNind; j++)
if(Zn[j] == AA)
inv = Inversos[j];
printf("TEXTO DESCIFRADO: [ Dk (Ci) = ( Ci - %d) %d mod %d ]\n",BA,inv,num);
for (i=0; i<fl; i++){
int indLetra = existe(Alfa, num, cif[i]);
if( indLetra != -1){
int d = indLetra - BA;
if(d<0) d+=num;
d = d*inv % num;
printf("%c",Alfa[d]);
}
else printf("%c",cif[i]);
} printf("\n");
}
return 0;
}
Notas:
- El programa esta en C++
- Las salidas tienen textos muy YOLO jiji :v
- El programa imprime la Tabla de Z*n (Y sus inversos). Si se quiere eliminar comentar/borrar las lineas 58 -> 60
- El alfabeto debe ser 26 <= Size
- El programa imprime el Alfabeto final. Si se quiere eliminar comentar/borrar lineas 78 -> 79
- El programa muestra el Texto original (Almacenado en Texto.txt), despues muestra el texto cifrado y por último lo descifra dicho texto.
- No hice trampa, se puede ver claramente que descifro el texto en las lineas 134 -> 141 xD
- Si se quiere omitir cierta impresion ver lineas 97->102, 123->124 y 132->141
- Si hay un elemento en el texto que NO haya sido agregado al alfabeto, se mantiene intacto.
- No consideré letras minusculas... ¿Debi hacerlo? D:
- ...Aunque si se agregan las letras minusculas al alfabeto funciona todo bien :v
- No considere numeros (Pero se pueden agregar al alfabeto)
- Hice que se imprimiera el texto original para ver ciertos caracteres que no se leian tal cual
- A la hora de leer los caracteres del texto tuve problemas con simbolos especiales... Se pueden poner dichos caracteres, pero se toman como "Fuera del Alfabeto"
Ej: Esta la palabra NIÑO, el programa lee NIÐO, por lo tanto, aunque se agregue Ñ al alfabeto, no funcionará :/
- PERO está programado de tal forma que si lo deberia hacer... Supongo que es por como leo los caracteres, pero lo intente de n+k formas y nada mas no :(
HOLA MUNDO... TE CUENTO QUE YO NO SE SI ESTO SIRVE
PERO OJALA SI... :D
SIGO TESTEANDO 007 -> NOPE
CAMINANDO POR LA CALLE UNA CARTA LEVANTE EN EL INTERIOR DOS NINOS SE EMPEZABAN A QUERER ELLA TIENE DOCE ANOS ES UN MES MAYOR QUE EL LA VERGUENZA , LA INOCENCIA LA HACEN ESCRIBIR TAL VEZ COMO HACEN LOS MAYORES HOY DOS ROSAS TE COMPRE YO NO SE SI SIRVEN DE ALGO SE HIZO TARDE YA LO VES PARA QUE NADIE LAS VIERA LAS TRATABA DE ESCONDER CUANDO AL FIN DIERON CONMIGO CASTIGADO Y SIN COMER... NO IMPORTA SI TU ME MIRAS YO ME CONVIERTO EN UN REY AZUL ME HICE UNA PROMESA HACE UNOS DIAS PARA TOCAR TU MANO Y NO ME ATREVO TODAVIA
VEN SI ERES HOMBRE VEN A VERME Y HABLAME CARA A CARA, FRENTE A FRENTE UN COBARDE Y MENTIROSO COMO TU SIN VALOR SIN DIGNIDAD YO QUE DEJADO TODO POR SEGUIRTE A TI Y TE HE DADO MUCHO MAS QUE A NADIE DI TE HE ENTREGADO DE MI VIDA LO MEJOR Y HOY ME LLAMAS Y ME DICES SIMPLEMENTE ADIOS MENTIRAS, MENTIRAS TU ME ENAMORASTE A BASE DE MENTIRAS, MENTIRAS TU ME ALIMENTASTE SIEMPRE DE MENTIRAS, MENTIRAS QUE ESTUPIDA QUE SIEMPRE TE CREI MENTIRAS, MENTIRAS QUE ME QUEMAN COMO FUEGO MENTIRAS, MENTIRAS QUE SE CLAVAN EN MI PECHO MENTIRAS, MENTIRAS QUE ME MATAN QUE SE RIEN DE MI
SE QUE AUN ME QUEDA UNA OPORTUNIDAD SE QUE AUN NO ES TARDE PARA RECAPACITAR SE QUE NUESTRO AMOR ES VERDADERO Y CON LOS ANOS QUE ME QUEDAN POR VIVIR DEMOSTRARE CUANTO TE QUIERO. CON LOS ANOS QUE ME QUEDAN, YO VIVIRE POR DARTE AMOR BORRANDO CADA DOLOR, CON BESOS LLENOS PASION, COMO TE AME POR VEZ PRIMERA CON LOS ANOS QUE ME QUEDAN, TE HARE OLVIDAR CUALQUIER ERROR NO QUISE HERIRTE, MI AMOR SABES QUE ERES MI ADORACION Y LO SERAS MI VIDA ENTERA. NO PUEDO IMAGINAR VIVIR SIN TI NO QUIERO RECORDAR COMO TE PERDI QUIZAS FUE INMADUREZ DE MI PARTE NO TE SUPE QUERER Y TE ASEGURO LOS ANOS QUE ME QUEDAN LOS VOY A DEDICAR A TI HACERTE TAN FELIZ QUE TE ENAMORES MAS DE MI YO TE AMARE HASTA QUE MUERA COMO COMPROBAR QUE NO SOY QUIEN FUI EL TIEMPO TE DIRA, SI TIENES FE EN MI, QUE COMO YO TE AME, MAS NADIE, TE PODRA AMAR JAMAS DIME QUE NO ES EL FINAL. SE QUE AUN ME QUE UNA OPORTUNIDAD, SE QUE AUN NO ES TARDE PARA RECAPACITAR, SE QUE NUESTRO AMOR ES VERDADERO, Y CON LOS ANOS QUE ME QUEDAN POR VIVIR DEMOSTRARE, CUANTO TE QUIERO. SE QUE NUESTRO AMOR ES VERDADERO, Y CON LOS ANOS QUE ME QUEDAN POR VIVIR DEMOSTRARE, CUANTO TE QUIERO. CUANTO TE QUIERO...
ME FALTA UN POCO EL AIRE QUE SOPLABA O SIMPLEMENTE TU ESPALDA BLANCA... NA NA NA NA NA NA NA NA Y ESE RELOJ YA NO ANDABA DE MANANA A TARDE SIEMPRE SE PARABA COMO YO EL TE MIRABA NUNCA LLORARE POR TI A PESAR DE LO QUE UN TIEMPO FUI... NO NO NO NO NO NO NO NO SI, LO ADMITO, ALGUNA VEZ TE PIENSO PERO NO ME TOCAS MAS SOLO QUE PENSABA LO INUTIL QUE ES DESVARIAR Y CREER QUE ESTOY BIEN CUANDO ES INVIERNO PERO TU NO ME DAS TU AMOR CONSTANTE NO ME ABRAZAS Y REPITES QUE SOY GRANDE ME RECUERDAS QUE REVIVO EN MUCHAS COSAS... NA NA NA NA NA NA NA NA CASA, VIAJES, COCHES, LIBROS, PAGINAS DE DIARIO QUE AUN SI YA NO VALGO NADA POR LO MENOS YO TE PERMITO CAMINAR Y SI QUIERES TE REGALO SOL Y MAR EXCUSA, SABES, NO QUISIERA MOLESTAR PERO COMO ESTO PUEDE ACABAR NO ME LO PUEDO EXPLICAR YO NO LO PUEDO EXPLICAR LA NEGRA NOCHE Y LA LUNA LLENA NOS OFRECIAN SOLO UN POCO DE ATMOSFERA YO LA AMO TODAVIA CADA DETALLE ES AIRE QUE ME FALTA Y SI ESTOY ASI ES POR LA PRIMAVERA PERO SE QUE ES UNA EXCUSA... SOLO QUE PENSABA LO INUTIL QUE ES DESVARIAR Y CREER QUE ESTOY BIEN CUANDO ES INVIERNO PERO TU NO ME DAS TU AMOR CONSTANTE NO ME ABRAZAS Y REPITES QUE SOY GRANDE ME RECUERDAS QUE REVIVO EN MUCHAS COSAS... NA NA NA NA NA NA NA NA CASA, VIAJES, COCHES, LIBROS, PAGINAS DE DIARIO QUE AUN SI YA NO VALGO NADA POR LO MENOS YO TE PERMITO CAMINAR SOLO QUE PENSABA LO INÚTIL QUE ES DESVARIAR Y CREER QUE ESTOY BIEN CUANDO ES INVIERNO PERO TU NO ME DAS TU AMOR CONSTANTE NO ME ABRAZAS Y REPITES QUE SOY GRANDE ME RECUERDAS QUE REVIVO EN MUCHAS COSAS... NA NA NA NA NA NA NA NA CASA, VIAJES, COCHES, LIBROS, PAGINAS DE DIARIO QUE AUN SI YA NO VALGO NADA POR LO MENOS YO TE PERMITO CAMINAR
Y SI QUIERES TE REGALO SOL Y MAR EXCUSA, SABES, NO QUISIERA MOLESTAR PERO COMO ESTO PUEDE ACABAR PERO COMO ESTO PUEDE ACABAR PERO COMO ESTO PUEDE ACABAR
ESTA HISTORIA TERMINO, NO EXISTE LO QUE UN DIA CONSTRUIMOS SE HA ESFUMADO PARECIERA QUE ES MAS FACIL DEJARNOS PERO ERES UN FANTASMA CONMIGO CAMINANDO NO CREAS QUE NO VALIO LA PENA NO CREAS QUE NO ERES IMPORTANTE AL CONTRARIO, YO TE AME CON TODA EL ALMA NO CREAS QUE NO VALIO LA PENA NO CREAS QUE LO PERDIMOS ESTO QUE NOS DUELE, AUNQUE NOS DUELE ES SOLO NUESTRO LO QUE CONSTRUIMOS SE ACABO FUE SOLO NUESTRO LO QUE CONSTRUIMOS SE ACABO SE LO LLEVA EL VIENTO ESTA HISTORIA TERMINO, NO EXISTE LO QUE UN DIA CONSTRUIMOS SE HA ESFUMADO PARECIERA QUE ES MAS FACIL DEJARNOS PERO ERES UN FANTASMA CONMIGO CAMINANDO YO NO APRENDI A SOLTAR AMORES YO NO APRENDI A DEJARTE IR ERAS UNA APUESTA DE LARGO PLAZO LO QUE CONSTRUIMOS LO QUE CONSTRUIMOS SE ACABO FUE SOLO NUESTRO LO QUE CONSTRUIMOS SE ACABO SE LO LLEVA EL VIENTO LO QUE CONSTRUIMOS SE ACABO FUE SOLO NUESTRO LO QUE CONSTRUIMOS SE ACABO SE LO LLEVA EL VIENTO
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment