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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18
101  Programación / Programación C/C++ / Tipo de dato bool en: 18 Junio 2016, 15:17 pm
Hola.

En los libros de C que tengo nunca se mencionan los datos bool. Siempre usan un Dato entero para ellos.

Obvio es solo de C++ pero...

Ahorita busque sobre ellos y solo salen referencias vagas pero ninguna referencia oficial.

Segun esto solo encontre

Código:
El tipo bool es una incorporación reciente del lenguaje (1998)

Pero no menciona ninguna fuente. El uso de enteros como booleanos a mi me parece correcto siempre que solo los manejes como 0 y 1

Incluso creo que muchos compiladoradores hacen algo como:

Código
  1. typedef bool unsiged char;


Pero bueno las preguntas son:

¿A que estandar pertenece?
¿Donde esta la pagina de ese Estandar?

Saludos
102  Foros Generales / Foro Libre / Respuestas y Ganadores al #SetiChallenge (Mensaje Alien) en: 14 Junio 2016, 16:19 pm
Por si recuerdan el tema sobre el desafio del SETI para descifrar el mensaje Alien:

¿Puedes descifrar este mensaje «alienígena»?

Ya salio la lista de ganadores:

http://www2.mps.mpg.de/homes/heller/downloads/files/SETI_crackers.txt

La lista fue publicada por el Dr. Rene Heller en su cuenta de twitter

Segun las respuestas cito en Ingles:

Citar
1. What is the typical body height of our interstellar counterparts?
2.45 m

2. What is their typical lifetime?
180 yr

3. What is the scale of the devices they used to submit their message?
100 km

4. Since when have they been communicating interstellar?
10,000 yr

5. What kind of object do they live on?
This one is tricky because I don't know the answer myself, making this part of the experiment a blind-blind test. The spatial information translates into 0.26 AU (100 times the Earth-Moon distance, if anyone recognized). The corresponding picture shows four planets or moons, one of which seems to be inhabited by our alien friends. So they might live on the 4th planet (or on one of three moons orbiting a giant planet) in the habitable zone around a low-mass star.

6. How old is their stellar system?
6 Gyr

Nota que mas o menos explican como obtuvieron la distancia y tiempo para calcular sobre los numeros dados pero aun asi no lo dan en detalle.

Saludos.

103  Programación / Programación C/C++ / [Aporte] Loteria en C - Programa que Muestra las cartas en Desorden en: 12 Junio 2016, 04:18 am
Les dejo un programa para que juegen loteria mexicana

Código
  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<stdlib.h>
  4.  
  5. int *barajear(int max);
  6.  
  7. char *cartas[] = {
  8. "El Ggallo","El diablito","La dama","El Catrin","El paraguas","La sirena","La escalera","La botella","El barril","El arbol","El melon","El valiente","El gorrito","La muerte","La pera","La bandera","El bandolon","El violoncello","La garza","El pajarito","La mano","La bota","La luna","El cotorro","El borracho","El corazon","El negrito","La sandia","El tambor","El camaron","Las jaras","El musico","La araña","El soldado","La estrella","El cazo","El mundo","El apache","El nopal","El alacran","la rosa","La calavera","La campana","El cantarito","El venado","El sol","La corona","La chalupa","El pino","El pescado","La palma","La maceta","El arpa","La rana"};
  9.  
  10. int main() {
  11. int *baraja = barajear(54);
  12. int i = 0;
  13. char c;
  14. while(i<54) {
  15. printf("%s\n",cartas[baraja[i]]);
  16. c = fgetc(stdin);
  17. i++;
  18. }
  19. }
  20.  
  21. int *barajear(int max) {
  22. char *no_repetidos = NULL;
  23. int *desorden = NULL;
  24. int r = 0;
  25. register int i = 0;
  26. sranddev();
  27. srand(time(NULL));
  28. while(no_repetidos == NULL){
  29. no_repetidos = calloc(max,sizeof(char));
  30. }
  31. while(desorden == NULL){
  32. desorden = calloc(max,sizeof(int));
  33. }
  34. do {
  35. r = rand() % max;
  36. if(no_repetidos[r] == 0) {
  37. desorden[i] = r;
  38. no_repetidos[r] = 1;
  39. i++;
  40. }
  41. }while(i < max);
  42. free(no_repetidos);
  43. return desorden;
  44. }

Saludos!
104  Foros Generales / Foro Libre / ¿Por que gana mas un Actor/futbolista que un Doctor/Bombero? en: 12 Junio 2016, 00:33 am
Hace unos meses en una de mis clases de economia surgio esa pregunta.

El profesor en su momento nos lo explico con varias graficas de microeconomia y 2 horas completas de Clase que actualmente no recuerdo en su totalidad.

Quiero ver cuales son sus opiniones y Argumentos al respecto.

Saludos
105  Programación / Programación C/C++ / [Aporte] Codigo para determinar el numero de barajas usadas en el juego de 21 en: 11 Junio 2016, 20:28 pm
Muy buen dia.

Estaba pensando que es posible determinar el numero de barajas usadas en un mazo de juego de 21.

Las condiciones que se tienen que dar para poder determinar el numero exacto de barajas son las siguientes.

  • El mazo de cartas solo se renueva cuando se terminan las cartas del mazo actual
  • Se tiene conocimiento pleno de todas las cartas que se han repartido desde el principio del juego
  • Las cartas ya usadas NO se reciclan, (Condicion igual a la UNO pero solo para dejarlo mas claro)

Dada las condiciones anteriores podemos saber cuantas barajas son usadas para crear el mazo de juego.

Vamos a obviar el contenido de algunas fuciones y solo tendremos:

Código
  1. int main() {
  2. struct mazo *mazo_juego = crear_mazo(6); // Se crea un mazo con 6 barajas
  3. struct carta *siguiente = NULL;
  4. int contador = 0;
  5. int acumulador = 0;
  6. siguiente = siguiente_carta(mazo_juego); //Se comienza caon la primera carta
  7. while(siguiente != NULL) {
  8. acumulador += valor_conteo(siguiente); //Acumulador va acumulando el conteo de cartas +1 para cartas del 2 al 6 y -1 para cartas del 10 al K + el A
  9. if(contador > 0 && (contador % 52) == 0 && acumulador == 0) {
  10. printf("mazo nuevo\n");
  11. printf("Cantidad de Barajas %i\n",(contador/52));
  12. contador = 0;
  13. }
  14. contador++;
  15. siguiente = siguiente_carta(mazo_juego);
  16.  
  17. }
  18. }

La funcion valor conteo es la siguiente:

Código
  1. int valor_conteo(struct carta *actual) {
  2. int r = 0;
  3. switch(actual->figura) {
  4. case 'A':
  5. case 'K':
  6. case 'Q':
  7. case 'J':
  8. case '0':
  9. r = -1;
  10. break;
  11. case '2':
  12. case '3':
  13. case '4':
  14. case '5':
  15. case '6':
  16. r = 1;
  17. break;
  18. }
  19. //printf("valor de conteo de %c es %i\n",actual->figura,r);
  20. return r;
  21. }

La estructura de una carta es la siguiente:

Código
  1. struct carta {
  2. char figura;
  3. char tipo;
  4. };


La condicion para saber el numero de barajas es la siguiente:

Código
  1. if(contador > 0 && (contador % 52) == 0 && acumulador == 0)

Lo que quiere decir que:

  • El contatador de cartas debe de ser mayor a 0 y cada que determinemos que es un "mazo nuevo" reiniciarlo a 0
  • El contador debe de ser un multiplo exacto de 52
  • Y el acumulador debe de ser 0

En uno de mis videos mostre como este acumulador sube o baja desde un valor muy alto a un valor muy bajo para llegar a 0 al finalizar el mazo actual.
 
El el programa main que mostre siempre da de salida.

Código:
mazo nuevo
Cantidad de Barajas 6


Ahora si cambio el algoritmo para usar N cantidad de barajas a un numero random obtengo

Código:
mazo nuevo
Cantidad de Barajas 73
mazo nuevo
Cantidad de Barajas 41
mazo nuevo
Cantidad de Barajas 36
mazo nuevo
Cantidad de Barajas 31
mazo nuevo
Cantidad de Barajas 1
mazo nuevo
Cantidad de Barajas 56
mazo nuevo
Cantidad de Barajas 71
mazo nuevo
Cantidad de Barajas 37
mazo nuevo
Cantidad de Barajas 90
mazo nuevo
Cantidad de Barajas 38
mazo nuevo
Cantidad de Barajas 2
mazo nuevo
Cantidad de Barajas 4
mazo nuevo
Cantidad de Barajas 44
mazo nuevo
Cantidad de Barajas 4
mazo nuevo
Cantidad de Barajas 4
mazo nuevo
Cantidad de Barajas 5
mazo nuevo
Cantidad de Barajas 5
mazo nuevo
Cantidad de Barajas 20
mazo nuevo
Cantidad de Barajas 3
mazo nuevo
Cantidad de Barajas 41
mazo nuevo
Cantidad de Barajas 80
mazo nuevo

Aun asi existen falsos positivos, en la salida anterior yo se apriori (Por que lo programe yo) que el valor random de numero de bajaras en el mazo este entre 6 y 112  y si vemos hay valores que nos dan "3" o algo menor a 6 es en falso positivo.

¿Por que se da esto?

Debido al orden aleatorio de un mazo de juego es posible que todas las condiciones que se mencionaron se cumpla antes de terminarse realmente un mazo.

Nuevamente las condiciones son

  • El contatador de cartas debe de ser mayor a 0 y cada que determinemos que es un "mazo nuevo" reiniciarlo a 0
  • El contador debe de ser un multiplo exacto de 52
  • Y el acumulador debe de ser 0

¿Hay forma de evitar falsos positivos?

Segun pienso NO ya que en un escenario real no puedes conocer a priori todas las variables...

¿Para que sirve determinar el numero de barajas usadas?

Como se menciona en el algoritmo de conteo de cartas es deseable saber el numero de barajas usadas en un mazo de juego para determinar si es buen momento de apostar.

El video de que comento es el siguiente:



Aun asi el código ahi mostrado no esta tan avanzado como el código que muestro en este post, pero sirve para el ejemplo didáctico de conteo de cartas aquí mostrado solo con ligeros cambios.

Saludos
106  Programación / Programación C/C++ / [Aporte] Numeros Enteros NO repetidos y pseudo-aleatorios (en desorden) en: 11 Junio 2016, 18:39 pm
Muy buen dia les dejo un funcion que devuelve una arreglo de numeros enteros no repetidos y pseudo-aleatorios.


Código
  1. int *aleatorios_no_repetidos(int max) {
  2. char *no_repetidos = NULL;
  3. int *desorden = NULL;
  4. int r = 0;
  5. register int i = 0;
  6. srand(time(NULL));
  7. while(no_repetidos == NULL){
  8. no_repetidos = calloc(max,sizeof(char));
  9. }
  10. while(desorden == NULL){
  11. desorden = calloc(max,sizeof(int));
  12. }
  13. do {
  14. r = rand() % max;
  15. if(no_repetidos[r] == 0) {
  16. desorden[i] = r;
  17. no_repetidos[r] = 1;
  18. i++;
  19. }
  20. }while(i < max);
  21. free(no_repetidos);
  22. return desorden;
  23. }

Funcion explicada paso a paso:

Código
  1. int *aleatorios_no_repetidos(int max) {
  2. char *no_repetidos = NULL; //Variable auxiliar para determinar si un numero ya fue agregado o no
  3. int *desorden = NULL; //Contenedor con los numeros en desorden y no repetidos
  4. int r = 0; //variable temporal para el numero pseudo-aleatorio
  5. register int i = 0; //contador de numeros en el arreglo desorden
  6. srand(time(NULL)); //inicializamos nuestra funcion random, en otros sistemas se puede utlizar algun otro generador de numeros aleatorios ya que esta implementacion es muy pobre
  7. //Los siguientes ciclos son usados para asignar espacio a no_repetidos, y  desorden respectivamennte se puede omitir el ciclo ya que rara vez calloc devuelve NULL, pero siempre es bueno validar que no exista error en el retorno de calloc
  8. while(no_repetidos == NULL){
  9. no_repetidos = calloc(max,sizeof(char));
  10. }
  11. while(desorden == NULL){
  12. desorden = calloc(max,sizeof(int));
  13. }
  14.  
  15. //El siguiente ciclo do-while es usado para rellenar los numeros mientras i se menor que el numero maximo
  16. do {
  17. r = rand() % max; //Aqui tenemos nuestro numero aleatorio de 0 a max - 1
  18. if(no_repetidos[r] == 0) { //validamos que r no exista en el arreglo de no_repetidos
  19. desorden[i] = r; //Asignamos r al arreglo de desorden
  20. no_repetidos[r] = 1; //agregamos 1 al arreglo de no_repetidos para que el numero r actual no vuelva ser agregado
  21. i++; //incrementamos i solo dentro del if para solo contabilizar los numeros que agregemos
  22. }
  23. }while(i < max);
  24. free(no_repetidos); //Liberamos el arrgelo auxiliar de no repetidos ya que no lo necesitamos mas
  25. return desorden; //regresamos la apuntador a desorden
  26. }


Para usar esta funcion tenemos el siguiente ejemplo:

Código
  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5.  
  6. int *aleatorios_no_repetidos(int max);
  7.  
  8.  
  9. int main() {
  10. int maximo = 10;
  11. int *numeros = aleatorios_no_repetidos(maximo); // Solo numeros del 0 al 9  en desorden Los cuales son 10 en total
  12. int i = 0;
  13. printf("Numeros aleatorios no repetidos:\n");
  14. while(i < maximo) {
  15. printf("%i\t",numeros[i]);
  16. i++;
  17. }
  18. printf("\n");
  19. free(numeros);
  20. return 0;
  21. }
  22.  


Salidas de ejemplo:

Código:
Numeros aleatorios no repetidos:
9 6 7 5 3 2 8 0 4 1
Numeros aleatorios no repetidos:
6 8 5 9 7 3 0 1 4 2
Numeros aleatorios no repetidos:
3 7 8 6 2 5 1 9 0 4
Numeros aleatorios no repetidos:
3 7 8 6 2 5 1 9 0 4
Numeros aleatorios no repetidos:
3 7 8 6 2 5 1 9 0 4
Numeros aleatorios no repetidos:
0 6 4 2 1 9 3 5 8 7
Numeros aleatorios no repetidos:
0 6 4 2 1 9 3 5 8 7
Numeros aleatorios no repetidos:
0 6 4 2 1 9 3 5 8 7
Numeros aleatorios no repetidos:
7 5 0 6 1 9 8 2 3 4
Numeros aleatorios no repetidos:
7 5 0 6 1 9 8 2 3 4

Cada 2 lineas es una salida de 10 numeros del 0 al 9 no repetidos y en desorden...

Noten que hay veces que se repite por la pobre implementación de rand() con time(), recomiendo si pueden implementar otra forma de aleatorios estaría mucho mejor el programa.

Proximamente agregare el video explicando el código mencionado.

Saludos

107  Programación / Programación C/C++ / [C] Eliminando Nodo de Arbol Binario (Solucionado) en: 30 Mayo 2016, 05:42 am
Tengo un detalle al momento de eliminar un nodo del arbol binario.

Dada la estructura:

Código
  1. struct nodo {
  2. struct nodo *padre;
  3. struct nodo *izquierdo;
  4. struct nodo *derecho;
  5. char *valor;
  6. };

Ya puedo agregar y buscar nodos sin problema y al momento de eliminar nodos hay varios casos ya aborde la mayoria de ellos solo tengo un detalle con el ultimo.

Casos:
  • El Nodo a eliminar no tiene hijos (Listo)
  • El Nodo a eliminar solo tiene un hijo derecho o izquierdo (Listo)
  • El Nodo a eliminar tiene ambos hijos (Pendiente)

El detalles es el decidir como reconectar los nodos cuando el noda eliminar tiene 2 hijos... (Si es un problema de algoritmo pero lo pongo aqui por que esta en C)

Si esos 2 hijos no tienen hijos no hay problema simplemente selecciono uno y lo pongo en el lugar del nodo eliminado. Pero el peor de los casos es cuando ambos nodos tienes 2 hijos cada uno mas o menos asi:


Código:
       p
       |
->     n
     /   \
    d     i
   / \   / \
  d   i d   i


La pregunta que tengo aqui seria la siguiente...

Tengo que hacer una funcion que reconecte y reorganize los nodos del arbol ¿Que recomendarian ustedes una funcion iterativa o una recursiva?

La otra solucion que tengo es manejar el nodo a eliminar como un arbol independiente desvincularlo del arbol principal y recorrer este nuevo subarbol de izquierda a derecha o viceversa y agregar cada nodo del subarbol al arbol principal, con excepcion de nodo a eliminar que seria la raiz del subarbol.

¿Que recomiendan ustedes?

La funcion que tengo es la siguiente:

Código
  1. void eliminar_nodo(struct nodo *arbol,char *valor) {
  2. struct nodo *n;
  3. struct nodo *padre;
  4. struct nodo *derecho;
  5. struct nodo *izquierdo;
  6. if(debug_arbol)
  7. debug_arbol = 0;
  8. n = buscar_valor(arbol,valor);
  9. if(n) {
  10.  
  11. if(n->derecho == NULL && n->izquierdo == NULL) {
  12. //No tiene hijos, hay que determinar si es el hijo derecho o izquierdo de su padre y desvincularlo
  13. padre = n->padre;
  14. if(padre->derecho == n) {
  15. padre->derecho = NULL;
  16. free_nodo(n);
  17. }
  18. else {
  19. padre->izquierdo = NULL;
  20. free_nodo(n);
  21. }
  22. }
  23. else {
  24. if(n->derecho != NULL && n->izquierdo != NULL) {
  25. // Tiene 2 Hijos
  26. padre = n->padre;
  27. // Detalle aqui.....
  28.  
  29. }
  30. else {
  31. if(n->derecho != NULL) { //Solo tiene al hijo derecho
  32. derecho = n->derecho;
  33. padre = n->padre;
  34. if(padre->derecho == n) { //hay que determinar si es el hijo derecho o izquierdo de su padre y vincular dicho nodo, con el nodo derecho del n actual y liberar n despues de eso
  35. padre->derecho = derecho;
  36. free_nodo(n);
  37. }
  38. else {
  39. padre->izquierdo = derecho;
  40. free_nodo(n);
  41. }
  42. }
  43. else { //Solo tiene al hijo izquierdo
  44. izquierdo = n->izquierdo;
  45. padre = n->padre;
  46. if(padre->derecho == n) { //hay que determinar si es el hijo derecho o izquierdo de su padre y vincular dicho nodo, con el nodo izquierdo del n actual y liberar n despues de eso
  47. padre->derecho = izquierdo;
  48. free_nodo(n);
  49. }
  50. else {
  51. padre->izquierdo = izquierdo;
  52. free_nodo(n);
  53. }
  54. }
  55. }
  56. }
  57. }
  58. else {
  59. printf("No existe un nodo con el valor \"%s\" en el arbol\n",valor);
  60. }
  61. }



Solucion en : http://foro.elhacker.net/programacion_cc/c_eliminando_nodo_de_arbol_binario-t453185.0.html;msg2072953#msg2072953
108  Foros Generales / Foro Libre / Lista de libros (Para usar en programa) en: 24 Mayo 2016, 03:02 am
Muy buenas tarde comunidad estoy armando una lista de libros para tenerla en un archivo TXT con fines didacticos..

El detalle que estoy programando un Arbol (Ya tengo el codigo) solo que me pidieron que le agregara Titulos de libros y es lo que estoy buscando.

No he encontrado una lista lo bastante grande nesitaba mas de 10mil titulos de libros de ser posible mas de un millon pero me conformo con unos mil xD  :silbar: :silbar: :silbar:

Por ejemplo busque en google por lista de libros y encontre esto:

https://es.wikipedia.org/wiki/Anexo:Los_100_mejores_libros_de_todos_los_tiempos,_seg%C3%BAn_el_Club_de_Libros_de_Noruega

Ya tengo esos 100  ;-) ;-) ;-) pero necesito encontrar alguna lista lo bastante amplia para pasarla a texto (Un libro por linea) Solo les pediria si me ayudaran a con links de listas de libros yo me encargo de pasarlos a texto.

Espero y me puedan ayudar :)

Si alguien sabe de alguna base de datos publica con muchisimos libros favor de avisarme  :laugh: :laugh:

Saludos!
109  Seguridad Informática / Criptografía / Recuperar RSA private key Desde una session tls en: 23 Mayo 2016, 15:18 pm
Como.me gustaria ver esa platica...

:https://www.blackhat.com/us-16/briefings/schedule/#recover-a-rsa-private-key-from-a-tls-session-with-perfect-forward-secrecy-3046

Citar
In certain circumstances it is possible to derive the private key of server regardless of the size of the used modulus. Even RSA keys of 4096 bits can be factored at the cost of a few CPU cycles and computational resources.

¿Alguien sabe algo del tema?

Saludos
110  Programación / PHP / ¿Representar estructura de C en PHP? en: 21 Mayo 2016, 15:29 pm
Muy buen dia.

Estoy tratando de implementar un pequeño programa que hice para hacerlo un servicio WEB... pero no estoy seguro de como aplicarlo en PHP

Tengo la siguiente estrucuta de C

Código
  1. struct temp{
  2. unsigned char *valor;
  3. unsigned int bytes;
  4. };

Mi duda es como implementarlo correctamente en PHP, segun lei lo mas parecido es un clase en PHP

entonces tengo:

Código
  1. <?php
  2. class temp {
  3. public $valor[];
  4. public $bytes;
  5. }
  6. ?>
  7.  

Mi duda es como decir que $valor tiene que ser de X cantidad;

Por ejemplo cuando leeo desde un archivo X cantidad de bytes en $valor puedo saber que $valor tiene X longitud pero no se como hacerlo a mano... esto es

Voy a crear una instanacia de esa clase y al elemento $valor le quier agregar un valor en el primer elemento y posteriormente tal vez le agrege mas. Simplemente lo agrego como

Código
  1. $valor[1] = 200;

He usado arrays pero para este caso no creo que sea lo mas eficiente..
Páginas: 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines