Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Clave

Estas en el tema de Clave en el foro de C/C++ en Foros del Web. Hola, Quiero ponerle a una carpeta una clave, pero que se puedan utilizar los archivos que hay dentro con C++ si se conoce la clave. ...
  #1 (permalink)  
Antiguo 31/07/2008, 02:27
 
Fecha de Ingreso: junio-2008
Mensajes: 28
Antigüedad: 15 años, 11 meses
Puntos: 0
Clave

Hola,
Quiero ponerle a una carpeta una clave, pero que se puedan utilizar los archivos que hay dentro con C++ si se conoce la clave. Además, quiero que al grabarla en un disco siga teniendo esa clave

¿Se puede? ¿Como?

Gracias y Salu2
  #2 (permalink)  
Antiguo 31/07/2008, 12:06
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Clave

se como hacer eso en linux en windows no tengo idea y no creeo que se pueda lo del disco.

lo que podrias hacer es un .zip con contraseña y usarlo como si fuera una carpeta, es lo unico que se me ocurre

y tampoco creeo que sea el foro adecuado para esa pregunta
  #3 (permalink)  
Antiguo 31/07/2008, 12:12
 
Fecha de Ingreso: junio-2008
Mensajes: 28
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Clave

¿Y como puedo utilizar un .zip como si fuera una carpeta? He buscado en Google y no trae nada
  #4 (permalink)  
Antiguo 31/07/2008, 12:44
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Clave

necesitas algun programa que pueda hacerlo, casi con todos puedes un ejemplo: IZarc o tabien winrar

el unico problema que le veo es que si fueras a una computadora que no tubiera algun programa que lo pueda hacer tubieras que extraer todo el .zip.

aunque pudieras solucionar eso con la vercion portable del IZarc
  #5 (permalink)  
Antiguo 31/07/2008, 13:31
 
Fecha de Ingreso: junio-2008
Mensajes: 28
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Clave

No, no me refiero a descomprimirlo. Lo que yo quiero, es utilizar con C++ unos archivos (.txt) donde hay unas contraseñas, pero quiero que el usuario que lo utilice, no pueda ver esos archivos, y lo más fácil es ponerle contraseña a la carpeta donde esté. ¿Se puede hacer eso con una carpeta? ¿Y sino, como se puede acceder a los archivos de un .zip con C++?
  #6 (permalink)  
Antiguo 31/07/2008, 16:13
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Clave

a disculpa entendi mal no es mejor que encriptes esos .txt?
mira encotnre este codigo en http://c.conclase.net/
dice que sirbe para encriptar cadenas de textos introducidas desde el teclado talbes lo puedas midificar para ese fin

/*
Encriptado de textos.
(C) Noviembre de 2.000
Jorge Eduardo Cordero Rodriguez
*/

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
FILE *arch;
char encriptado[100],desencriptado[100], r, pas[11];
int longitud,i;


arch=fopen("Datos.txt","w");

clrscr();

cout<<"Escribe el texto que deseas encriptar : ";
cin.getline(encriptado,100);

longitud = strlen(encriptado);

for ( i = 0;i<longitud;i++)
{
encriptado[i] = char(toascii(encriptado[i])+122);
}
fprintf(arch,"%s",encriptado);
cout<<"\n\nEl texto encriptado es "<<encriptado;

cout<<"\n\nDeseas desencriptar el texto s/n ";
cin>>r;
if (toupper(r)=='S')
{
cout<<"\n\nDame la clave de acceso para desencriptar : ";
cin>>pas;
if (strcmp(pas,"C-con-Clase")==0)
{
cout<<"\n\nEl texto desencriptado es ";
for(i=0;i<longitud;i++)
{
desencriptado[i]=char(encriptado[i])-122;
cout<<desencriptado[i];
}
}
else
{
cout<<"\n\n\n Lo sentimos mucho, no esta autorizado para ver el archivo....";
getch();
}
}
else cout<<"\n\nGracias por utiliza nuestro programa...";
getchar();
fclose(arch);

return(0);
}
  #7 (permalink)  
Antiguo 31/07/2008, 18:41
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Clave

Otro método de encriptado es el simple XOR, aquí dejo un pequeño ejemplo:
Código:
char data[128];
char clave[128];
int pos_clave=0; // Posición en la clave
int longitud_data;
int longitud_clave;

printf("Introduzca los datos a encriptar:\n");
gets(data);
printf("Introduzca la clave:\n");
gets(clave);
longitud_data=strlen(data);
longitud_clave=strlen(clave);
for(int N=0; N<longitud_data; N++) {
        data[N]^=clave[pos_clave];
        pos_clave++; if(pos_clave==longitud_clave) pos_clave=0;
}
printf("Datos encriptados: \"%s\"\n", data);
printf("Introduzca la clave:\n");
gets(clave);
longitud_clave=strlen(clave);
pos_clave=0;
for(int N=0; N<longitud_data; N++) {
        data[N]^=clave[pos_clave];
        pos_clave++; if(pos_clave==longitud_clave) pos_clave=0;
}
printf("Datos desencriptados: \"%s\"\n", data);
Hay que tener en cuenta que al encriptar con este método algunos caracteres pueden pasar a ser cero, por lo que al escribirlos en el archivo hay que hacerlo en forma binaria no en texto. ( fopen("Datos.txt","wb"); ).
  #8 (permalink)  
Antiguo 01/08/2008, 02:22
 
Fecha de Ingreso: junio-2008
Mensajes: 28
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Clave

Gracias, eso me servirá. Pero tengo otro problema: Ahora, además del texto, voy a necesitar un archivo .3ds, y tampoco quiero que pueda modificarlo. ¿Como puedo hacer para que no pueda usarlo ni verlo?
  #9 (permalink)  
Antiguo 01/08/2008, 12:05
Avatar de Fayca  
Fecha de Ingreso: abril-2008
Mensajes: 164
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Clave

que es un archivo .3ds?
  #10 (permalink)  
Antiguo 01/08/2008, 15:03
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Clave

Puedes usar el método de XOR pero aplicado a archivos binarios, desencriptando el archivo a un archivo temporal, claro que en ese punto se puede ver el archivo, o bien desencriptarlo en la memoria y después usarlo desde ahí, todo depende del código de tu programa.

Te dejo una función para encriptar/desencriptar archivos binarios, o lo que sea, usando XOR:
Código:
void encriptar(char *origen, char *destino, char *clave)
{
	FILE *archivo_origen;
	FILE *archivo_destino;
	char data[128];
	int pos_clave=0; // Posición en la clave
	int longitud_clave;
	int longitud_data;

	longitud_clave=strlen(clave);
	archivo_origen=fopen(origen, "rb");
	archivo_destino=fopen(destino, "wb");

	do {
		longitud_data=fread(&data, sizeof(char), sizeof(data), archivo_origen);
		for(int N=0; N<longitud_data; N++) {
			data[N]^=clave[pos_clave];
			pos_clave++; if(pos_clave==longitud_clave) pos_clave=0;
		}
		fwrite(&data, sizeof(char), longitud_data, archivo_destino);
	} while(longitud_data==sizeof(data));

	fflush(archivo_origen);
	fclose(archivo_origen);
	fflush(archivo_destino);
	fclose(archivo_destino);
}

int main()
{
	// Para encriptar solo se llama a la función
	encriptar("archivo.3ds", "encriptado.dat", "1234");
	// Para desencriptar se llama a la misma función pero que lea el archivo encriptado
	encriptar("encriptado.dat", "desencriptado.3ds", "1234");
	return 0;
}
@Fayca
Cita:
que es un archivo .3ds?
Es un formato creado para 3D Studio Max, se usa para guardar objetos tridimensionales.

En Wikipedia: http://es.wikipedia.org/wiki/3D_Studio_Max
Ejemplo: http://www.the3dstudio.com/product_details.aspx?id_product=37948
  #11 (permalink)  
Antiguo 03/08/2008, 02:46
 
Fecha de Ingreso: junio-2008
Mensajes: 28
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Clave

Muchas gracias, yackcae, te has ganado un karma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:22.