Splinter, ¡te reclaman!

Started by josebita, August 04, 2009, 02:06:21 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.


splinter_work

No puedo responder ahi, porque no me acuerdo, ni la password ni el mail que use para registrarme.

El error esta en que cuando hace decrypt en vez de guardar "((l/8) + 1) * 8" bytes, guarda "strlen((string) out)".


//    fwrite( out, strlen( (string) out), f );
    fwrite( out, ( ( l / 8 ) + 1 ) * 8, f );


Igualmente yo no usaria ese metodo, si sucede algun problema como ser apagado de la pc justo cuando desencripto el archivo, este quedara desencriptado y no servira para la proxima corrida.

yo haria desencripcion en memoria y lo usaria de esa forma, asi:


import "mod_crypt"
import "mod_mem"
import "mod_file"
import "mod_string"
import "mod_say"

Global
    // sizeof of this struct must be aligned to 8
    struct test;
        int var1;           // 4 bytes
        int var2;           // 4 bytes
        int var3;           // 4 bytes
        char text[20];      // 20 bytes
    End                     // Total: 32 bytes = 4 blocks of 8 bytes
    // string type in struct isn't valid for encription
End

Process Main()
Begin
    if(fexists("struct.dat"))
        load("struct.dat", test);
        decrypt(&test, (sizeof(test)/8));
    End

    say ("Var 1:  " + test.var1);
    say ("Var 2:  " + test.var2);
    say ("Var 3:  " + test.var3);
    say ("Var 4: [" + test.text + "]");

    test.var1 += 10;
    test.var2 += 100;
    test.var3 += 1000;
    test.text = "total = " + ( test.var1 + test.var2 + test.var3 );

    encrypt(&test, (sizeof(test)/8));
    save("struct.dat", test);
End

Process encrypt( char * in, int l )
Private
    #include "key.inc"
    char *out;
Begin
    out = calloc( l, 8 );
    crypt_encrypt(CRYPT_3DES, &key, in, out, l);
    memmove( in, out, l * 8 );
    free( out );
End

Process decrypt( char * in, int l )
Private
    #include "key.inc"
    char *out;
Begin
    out = calloc( l, 8 );
    crypt_decrypt(CRYPT_3DES, &key, in, out, l);
    memmove( in, out, l * 8 );
    free( out );
End


Agradeceria si podes transmitir mi respuesta a ese post... gracias.

Adicionalmente, avisar que si uno hace calloc o alguna funcion de alocacion de memoria, hay que hacer el free.

Prg

QuoteAdicionalmente, avisar que si uno hace calloc o alguna funcion de alocacion de memoria, hay que hacer el free.

disculpa, ¿y si no hiciéramos free y saliéramos del juego la memoria seguiría ocupada?
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

DCelso

depende del S.O. En windows y los linux actuales sí.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Prg

en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

no me refiero a la salida, me refiero a funciones, que se supone que al ser funciones pueden usarse reiteradas veces... con lo que se harian muchos allocs sin liberar
Download Lastest BennuGD Release: http://www.bennugd.org/node/2