Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Stakewinner00 en 31 Agosto 2012, 10:31 am



Título: Aporte c++
Publicado por: Stakewinner00 en 31 Agosto 2012, 10:31 am
Estoy creando una encriptador  en c++ y quisiera saber su opinion haber k les parece y como puedo mejorarlo.

Los numeros con los que se cifra son aleatorios para evitar que alguien tenga una pequeña chuleta con todo el abecedario y lo k coresponde.

Nose demasiado de criptografia, por lo que puede que hayan bastantes fallos logicos.

Bueno aqui esta el codigo.


Código
  1. //Created by STAKEWINNER00
  2.  
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <ctime>
  6.  
  7. using namespace std;
  8.  
  9. //FUNCION QUE GENERA UN NUMERO ALEATORIO
  10. int ran(){
  11.    srand((int)time(NULL));
  12.    int num;
  13.            num = (rand()%50)+1;
  14. }
  15. int num=ran();
  16.  
  17. //ENCRIPTACION CON EL SISTEMA PROPIO
  18. int CR1 (char mens) {
  19.    char letra;
  20.       cout << endl << "Mensaje cifrado::";
  21. letra = 'D' + num;
  22. letra = letra + 'D';
  23. cout << letra;
  24. while (mens!=';') {
  25.    letra =  mens + num;
  26.    letra = letra + 'D';
  27.    cin >> mens;
  28.    cout << letra;
  29.       if ((mens<31)&&(mens>0)||(mens>127)) {
  30.    cout << ":::";
  31.   num=ran();
  32.    }
  33.  
  34. }
  35. cout << endl << endl;
  36. system("PAUSE >> NUL");
  37. }
  38.  
  39. int RCR1 (char mens) {
  40.    char letra;
  41.    char nu;
  42.    int i=0;
  43.       cout << endl << "Mensaje cifrado::";
  44.       letra=mens - 'D';
  45.  while (nu!='D') {
  46.      i++;
  47.      cout << 50-i;
  48.      system("CLS");
  49.  nu = letra - i;
  50.  }
  51.      cin >> mens;
  52. while (mens!=';') {
  53.        letra = mens - 'D';
  54.    letra =  letra - i;
  55.    cin >> mens;
  56.    cout << letra;
  57. num=ran();}
  58. cout << endl << endl;
  59. system("PAUSE >> NUL");
  60. }
  61. //ENCRIPTACION CON EL SISTEMA PROPIO CON EL SEGUNDO METODO
  62. int CR1M2 (char mens) {
  63.    char letra;
  64.        char num2;
  65.        num2=1+rand()%(200-1);
  66.       cout << endl << "Mensaje cifrado::";
  67. while (mens!=';') {
  68.    letra = 'D' + num;
  69.    letra = letra + 'D';
  70.    cout << letra;
  71.  
  72.    letra =  mens + num;
  73.    letra = letra + 'D';
  74.    letra = letra - num2;
  75.  
  76.    cin >> mens;
  77.    cout << letra << num2;
  78. num=1+rand()%(50-1);
  79. }
  80. cout << endl << endl;
  81. system("PAUSE >> NUL");
  82. }
  83.  
  84. int RCR1M2 (char mens) {
  85.    char letra;
  86.    char nu;
  87.    int i=0;
  88.       cout << endl << "Mensaje descifrado::";
  89.  
  90. while (mens!=';') {
  91.    i=0;
  92.      letra=mens - 'D';
  93.      while (nu!='D') {
  94.    i++;
  95.       nu = letra - i;
  96.  }
  97.  nu =NULL;
  98.    cin >> mens;
  99.    letra = mens - 'D';
  100.    letra =  letra - i;
  101.    cin >> mens;
  102.    letra = letra + mens;
  103.    cin >> mens;
  104.    cout << letra;
  105. }
  106. cout << endl <<endl;
  107. system("PAUSE >> NUL");
  108. }
  109.  
  110. //ENCRIPTACION Y DESNECRIPTACION EN CESAR
  111. void desencript (char mens, int n) {
  112.        char letra;
  113.    cout << endl << endl << "Mensaje descifrado::";
  114. while (mens!=';') {
  115. letra=mens-n;
  116. cin >> mens;
  117. cout << letra;
  118. }
  119. cout << endl << endl;
  120. system("PAUSE >> NUL");
  121. }
  122. int encript (char mens, int n) {
  123.    char letra;
  124.       cout << endl << "Mensaje cifrado::";
  125. while (mens!=';') {
  126. letra=mens+n;
  127. cin >> mens;
  128.  
  129. cout << letra;
  130. }
  131. cout << endl << endl;
  132. system("PAUSE >> NUL");
  133. }
  134.  
  135. //MAIN
  136. int main()
  137. {
  138. int opcion;
  139. char mens;
  140. int n;
  141. a:
  142. system("CLS");
  143. cout << "1.cifrar (CESAR)" << endl << "2.descifrar (CESAR)" << endl << "3.cifrar (CR1)" << endl << "4.descifrar  (CR1)" <<endl << "5.cifrar (CR1M2)" << endl << "6.descifrar (CR1M2)"<< endl<<endl<<">>";
  144. cin >> opcion;
  145. if ((opcion==1)||(opcion==2)) {
  146. cout << endl<<"NUMERO DE SALTOS-->";
  147. cin >> n;
  148. }
  149. switch(opcion) {
  150. case 1:cout << "MENSAJE-->";cin>>mens;encript(mens,n);goto a;
  151. case 2:cout << "MENSAJE-->";cin>>mens;desencript(mens,n);goto a;
  152. case 3:cout << "MENSAJE-->";cin>>mens;CR1(mens);goto a;
  153. case 4:cout << "MENSAJE-->";cin>>mens;RCR1(mens);goto a;
  154. case 5:cout << "MENSAJE-->";cin>>mens;CR1M2(mens);goto a;
  155. case 6:cout << "MENSAJE-->";cin>>mens;RCR1M2(mens);goto a;
  156. }
  157.  
  158. }
  159.  


Título: Re: Aporte c++
Publicado por: xiruko en 1 Septiembre 2012, 23:31 pm
una pregunta que no tiene que ver con el codigo en si... yo no se casi nada de criptografia, pero si cifras algo con numeros aleatorios, como lo descifras luego? no lo entiendo ya que, por ejemplo, 1 mismo texto dara distintas formas cuando este cifrado, pero como haces para que todas acaben en 1 misma manera (texto original) al descifrarlo?

gracias por la ayuda, un saludo!


Título: Re: Aporte c++
Publicado por: farresito en 1 Septiembre 2012, 23:39 pm
una pregunta que no tiene que ver con el codigo en si... yo no se casi nada de criptografia, pero si cifras algo con numeros aleatorios, como lo descifras luego? no lo entiendo ya que, por ejemplo, 1 mismo texto dara distintas formas cuando este cifrado, pero como haces para que todas acaben en 1 misma manera (texto original) al descifrarlo?

gracias por la ayuda, un saludo!
Lo mismo me pregunto yo. Un cifrador que no puede descifrar? Vaya...


Título: Re: Aporte c++
Publicado por: Stakewinner00 en 2 Septiembre 2012, 00:02 am
SI se puede revertir el primer caracter es la letra D cifrada con el numero aleatorio solo hay 50 posibilidades por lo k prueba los 50 numeros y cuando uno da D luego con el mismo numero descifra los otros caracteres asta conseguir el hola por ejemplo, lo e estadi probando y no da muchos problemas.

Si quieren pueden probarlo

aki esta esa parte

antes de criticar podeis mirar el code pero ya esta bien k alguien critique mi programa

Código:
letra = 'D' + num;    letra = letra + 'D';    cout << letra;


Título: Re: Aporte c++
Publicado por: farresito en 2 Septiembre 2012, 00:23 am
SI se puede revertir el primer caracter es la letra D cifrada con el numero aleatorio solo hay 50 posibilidades por lo k prueba los 50 numeros y cuando uno da D luego con el mismo numero descifra los otros caracteres asta conseguir el hola por ejemplo, lo e estadi probando y no da muchos problemas.

Si quieren pueden probarlo

aki esta esa parte

antes de criticar podeis mirar el code pero ya esta bien k alguien critique mi programa

Código:
letra = 'D' + num;    letra = letra + 'D';    cout << letra;
No iba con ofensa; todo lo contrario. Lo que pasa es que yo no estoy para leerme detalladamente todos los códigos, como comprenderás. Leo tu explicación y esta es la conclusión que saco. Por cierto, para el bien de todo el mundo, incluido el tuyo, formatea el código (pone los tabs y alinéalo bien). Prueba este link. Si no recuerdo mal, lo he usado más de una vez y me ha funcionado:

http://www.prettyprinter.de/


Título: Re: Aporte c++
Publicado por: xiruko en 2 Septiembre 2012, 04:30 am
Citar
antes de criticar podeis mirar el code pero ya esta bien k alguien critique mi programa

 :o

como dice farresito yo tampoco lo decia para ofender ni nada, y como dije en mi post no se casi nada de criptografia y por eso preguntaba...

en fin, me apunto la manera de hacerlo y la probare.

un saludo!


Título: Re: Aporte c++
Publicado por: avesudra en 2 Septiembre 2012, 05:12 am
Está bastante bien pero piensa que no cumple con su prometido , es decir cualquier persona que tenga tu clase puede descifrar un mensaje , en el subforo de criptografía hay un taller y un manual de APOKLIPTICO bastante buenos por si quieres echarle una ojeada, eso sí son complicados. Yo hace no mucho hice un encriptador pero que se basaba en criptografía simetrica y ademas el algoritmo me lo habia inventado yo( era malillo) , consistia en cifrar el texto plano con la contraseña que quieras y al que se lo mandes lo descifra con esa contraseña.Pero bueno a pesar de la critica esa, has tenido una muy buena idea y además has implementado el cifrado cesar o sea que muy bien!

¡Un saludo!


Título: Re: Aporte c++
Publicado por: Stakewinner00 en 2 Septiembre 2012, 08:32 am
Está bastante bien pero piensa que no cumple con su prometido , es decir cualquier persona que tenga tu clase puede descifrar un mensaje , en el subforo de criptografía hay un taller y un manual de APOKLIPTICO bastante buenos por si quieres echarle una ojeada, eso sí son complicados. Yo hace no mucho hice un encriptador pero que se basaba en criptografía simetrica y ademas el algoritmo me lo habia inventado yo( era malillo) , consistia en cifrar el texto plano con la contraseña que quieras y al que se lo mandes lo descifra con esa contraseña.Pero bueno a pesar de la critica esa, has tenido una muy buena idea y además has implementado el cifrado cesar o sea que muy bien!

¡Un saludo!

Ya lo mirare

Gracias


Título: Re: Aporte c++
Publicado por: Stakewinner00 en 2 Septiembre 2012, 08:33 am
No iba con ofensa; todo lo contrario. Lo que pasa es que yo no estoy para leerme detalladamente todos los códigos, como comprenderás. Leo tu explicación y esta es la conclusión que saco. Por cierto, para el bien de todo el mundo, incluido el tuyo, formatea el código (pone los tabs y alinéalo bien). Prueba este link. Si no recuerdo mal, lo he usado más de una vez y me ha funcionado:

http://www.prettyprinter.de/

Ok voy a probarlo