elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Encriptador en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Encriptador en C++  (Leído 5,945 veces)
mastersuv

Desconectado Desconectado

Mensajes: 23


Tomorrow couldn't be a new day...


Ver Perfil WWW
Encriptador en C++
« en: 22 Agosto 2010, 09:26 am »

Después de un largo rato de pensarle y buscar conceptos T_T
he logrado crear un sencillo sistema de cifrado.

Bueno... la cifrado es algo loca, pero la pueden modificar a su gusto.

Me gustaría que me dieran consejos de como podría mejor este código.
Que cosas hize de más, o que le falta.
¿Estoy usando mucho código innecesario?

PD: Solo cifra palabras en minusculas, y solo acepta espacios como separador.

Aquí les dejo el codigo:

Código
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <vector>
  4. #include <string>
  5. #include <sstream>
  6.  
  7. using namespace std;
  8.  
  9. vector<string> AddNumbers(vector<string> vector){
  10. vector.push_back("cml29");
  11. vector.push_back("mpdo1");
  12. vector.push_back("cp3p");
  13. vector.push_back("maT4");
  14. vector.push_back("88gk");
  15. vector.push_back("29f");
  16. vector.push_back("9fff");
  17. vector.push_back("fj239");
  18. vector.push_back("fj33f");
  19. vector.push_back("f888");
  20. vector.push_back("45fc");
  21. vector.push_back("d892");
  22. vector.push_back("cronq");
  23. vector.push_back("you");
  24. vector.push_back("llnever");
  25. vector.push_back("know");
  26. vector.push_back("this");
  27. vector.push_back("encr");
  28. vector.push_back("ipta");
  29. vector.push_back("tion");
  30. vector.push_back("lol");
  31. vector.push_back("rf8");
  32. vector.push_back("l28");
  33. vector.push_back("66");
  34. vector.push_back("d6");
  35. vector.push_back("e79d");
  36. vector.push_back("49jf");
  37. return vector;
  38. }
  39. vector<string> AddLetters(vector<string> vector){
  40. vector.push_back("a");
  41. vector.push_back("b");
  42. vector.push_back("c");
  43. vector.push_back("d");
  44. vector.push_back("e");
  45. vector.push_back("f");
  46. vector.push_back("g");
  47. vector.push_back("h");
  48. vector.push_back("i");
  49. vector.push_back("j");
  50. vector.push_back("k");
  51. vector.push_back("l");
  52. vector.push_back("m");
  53. vector.push_back("n");
  54. vector.push_back("o");
  55. vector.push_back("p");
  56. vector.push_back("q");
  57. vector.push_back("r");
  58. vector.push_back("s");
  59. vector.push_back("t");
  60. vector.push_back("u");
  61. vector.push_back("v");
  62. vector.push_back("w");
  63. vector.push_back("x");
  64. vector.push_back("y");
  65. vector.push_back("z");
  66. vector.push_back(" ");
  67.  
  68. return vector;
  69. }
  70.  
  71. class CODSYS{
  72. public:
  73. vector<string> abc;
  74. vector<string> nums;
  75.  
  76. CODSYS(){
  77. abc = AddLetters(abc);
  78. nums = AddNumbers(nums);
  79. }
  80. };
  81.  
  82. vector<string> PartirString(string a){
  83. vector<string> vector;
  84.    string word;
  85.    stringstream stream(a);
  86.    while( getline(stream, word, 'x'))
  87. vector.push_back(word);
  88.  
  89. return vector;
  90. }
  91.  
  92. string descifrar(string a){
  93. CODSYS *dat = new CODSYS;
  94. vector<string> numeros;
  95. // vector<string>::iterator it;
  96. string numeroactual;
  97. string descifrado;
  98.  
  99. numeros = PartirString(a); // Se eliminan las "x" y se guarda cada número como un elemento del vector.
  100.  
  101. for(unsigned int i = 0; i < numeros.size(); i++){
  102. numeroactual = numeros[i];
  103. for(unsigned int z = 0; z < dat->nums.size(); z++){
  104. if(numeroactual == dat->nums[z]){
  105. descifrado += dat->abc[z];
  106. break;
  107. }
  108. }
  109. }
  110. delete dat;
  111.  
  112. return descifrado;
  113. }
  114.  
  115. string cifrar(string a){
  116. CODSYS *dat = new CODSYS;
  117. string letraactual;
  118. string cifrado;
  119.  
  120. for(unsigned int i = 0; i < a.length(); i++){
  121. letraactual = a[i];
  122. for(unsigned int z = 0; z < dat->abc.size(); z++){
  123. if(letraactual == dat->abc[z]){
  124. cifrado += dat->nums[z];
  125. cifrado += "x";
  126. }
  127. }
  128. }
  129. delete dat;
  130.  
  131. return cifrado;
  132. }
  133.  
  134. void EncMain(){
  135. system("cls");
  136. string cadena;
  137.  
  138. cout << "Ingresa una Cadena para encriptarla:\n";
  139. getline(cin, cadena);
  140.  
  141. cout << "\n\n= " << cifrar(cadena) << "\n\n" ;
  142.  
  143. system("PAUSE");
  144. system("CLS");
  145. }
  146.  
  147. void DesencMain(){
  148. system("cls");
  149. string cadena;
  150.  
  151. cout << "Ingresa una Cadena para desencriptarla:\n";
  152. getline(cin, cadena);
  153.  
  154. cout << "\n\n= " << descifrar(cadena) << "\n\n";
  155.  
  156. system("PAUSE");
  157. system("CLS");
  158. }
  159.  
  160. int main(int argc, char *argv[]){
  161. while(true){
  162. string dec;
  163. r:
  164. cout << "==> Encriptador por mastersuv v0.1 <==\n\n";
  165. cout << "---- Selecciona una opcion: ----\n";
  166. cout << "||                            ||\n";
  167. cout << "|| 1. cifrar una Cadena    ||\n";
  168. cout << "|| 2. descifrar una Cadena ||\n";
  169. cout << "||                            ||\n";
  170. cout << "--------------------------------\n\n> ";
  171.  
  172. getline(cin, dec);
  173.  
  174. for(unsigned int i = 0; i < dec.length(); i++){
  175. if(!isdigit(dec[i])){
  176. MessageBoxA(NULL, "Ingrese solo numeros!", "Error!", MB_OK);
  177. system("CLS");
  178. goto r;
  179. break;
  180. }
  181. else if((dec > "2" || dec < "1")){
  182. MessageBoxA(NULL, "Opción inválida", "Error!", MB_OK);
  183. system("CLS");
  184. goto r;
  185. break;
  186. }
  187. else{ continue; }
  188. }
  189.  
  190. if(dec == "1"){
  191. EncMain();
  192. }
  193. else if(dec == "2"){
  194. DesencMain();
  195. }
  196. }
  197. return 0;
  198. }


En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Encriptador en C++
« Respuesta #1 en: 22 Agosto 2010, 15:59 pm »

el codigo se puede mejorar bastante... los if,else if, else no necesitan break al terminar. los goto son una mala practica en programacion, no importa el lenguaje... la encriptacion se puede mejorar bastante, se ve demasiado poco estetica. en mi S.O. no se ejecutara correctamente debido a los llamados a system(), que tambien son una mala practica. Todos los miembros de la clase son publicos, tambien es una mala practica.

consejos:

1) Busca remplazos a los system.
2) Declara el string dec fuera del while, asi evitas tener que usar el goto.
3) Decide si utilizaras Apis o no, eso le quita portabilidad al ejecutable.
4) Es bueno que las funciones tengan un valor de retorno, asi sabes si ocurrio algun error.
5) Quita "int argc" y "char *argv[]" si no los vas a utilizar.


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Encriptador en C++
« Respuesta #2 en: 22 Agosto 2010, 17:28 pm »

Lord R.N.A, los break' s los está usando porque están en el ámbito de un ciclo FOR, los usa para parar el ciclo.

No es que esté mal usar solo miembros públicos, pero se pierde la abstracción.

Lo que se ve feo es el agregado de las palabras al vector.

No sé si estás liberando bien la memoria con delete.

Saludos.
« Última modificación: 22 Agosto 2010, 18:04 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Encriptador en C++
« Respuesta #3 en: 22 Agosto 2010, 18:32 pm »

Lord R.N.A, los break' s los está usando porque están en el ámbito de un ciclo FOR, los usa para parar el ciclo.

No es que esté mal usar solo miembros públicos, pero se pierde la abstracción.

Lo que se ve feo es el agregado de las palabras al vector.

No sé si estás liberando bien la memoria con delete.

Saludos.

yo veo un problema con los break; nunca pueden ser tomados, debido a que siempre salta a "r" antes de llegar.
En línea

mastersuv

Desconectado Desconectado

Mensajes: 23


Tomorrow couldn't be a new day...


Ver Perfil WWW
Re: Encriptador en C++
« Respuesta #4 en: 22 Agosto 2010, 18:38 pm »

Exactamente, eso es por lo cual use break;

Y con lo del agregado de palabras, te refieres a las que van a sustituir cierto?

Yo también se que eso esta feo pero quize dramatizarlo jaja para ver como se veía.
En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Encriptador en C++
« Respuesta #5 en: 22 Agosto 2010, 19:03 pm »

Exactamente, eso es por lo cual use break;

Y con lo del agregado de palabras, te refieres a las que van a sustituir cierto?

Yo también se que eso esta feo pero quize dramatizarlo jaja para ver como se veía.

Hiciste un codigo tan feo porque lo querias hacer asi :huh: no se pero no me parece
En línea

mastersuv

Desconectado Desconectado

Mensajes: 23


Tomorrow couldn't be a new day...


Ver Perfil WWW
Re: Encriptador en C++
« Respuesta #6 en: 22 Agosto 2010, 19:06 pm »

Es mi primer programa usando vectores de esta forma.
Nunca había usado tantos for y todavía soy nuevo en C++...

Este es uno de mis primeros programas pero ya veo que son basura.
 :(
En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: Encriptador en C++
« Respuesta #7 en: 22 Agosto 2010, 20:34 pm »

:¬¬ No se dijo que fuera basura... se dijo que se pueden mejorar bastante.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Encriptador en C++
« Respuesta #8 en: 26 Agosto 2010, 03:01 am »

¡Buenas!

Creo que te vendria bien algo de infromacion de las chinchetas del subforo de criptografia, en el foro de seguridad informatica. Como bien te han indicado, los metodos criptograficos son independientes del lenguaje de programacion que utilices, y conocerlos te ayudara a ordenar las ideas.

Y sobre todo, sigue asi y sigue intentandolo, que todos hemos hemos empezado por codigos mas o menos "guarros", y con el tiempo y la practica, vas consiquiendo un codigo mas claro y conciso.

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Encriptador de mensajes
.NET (C#, VB.NET, ASP)
Genkidan 4 3,199 Último mensaje 12 Abril 2012, 03:35 am
por Genkidan
Encriptador en Python
Programación General
NIKOLAY7 3 2,918 Último mensaje 7 Enero 2013, 21:25 pm
por NIKOLAY7
[AYUDA]Encriptador de Archivos en VBS
Análisis y Diseño de Malware
danny920825 4 4,802 Último mensaje 11 Marzo 2014, 03:13 am
por danny920825
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines