Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Handling von viel speicher

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.03.2003, 10:24 Uhr
~Tesla
Gast


Hi,
jetzt habe ich ein weiteres problem, ich muss mit relative grossen Dateien (ca. 500-700MB) umherspringen, und von diesen Dateien, habe ich mindestens drei gleichzeitig zu bearbeiten...
Jetzt meine Frage, meine Box braucht so ungefähr 30 sec. um eine 500mb Datei mit zufalls zeichen zu schreiben, und sobalt ich aber alle drei dateien im speicher habe wird das alles viel zu langsam...
jetzt meine Frage gibt es da vieleicht einige programiertechnische tricks wie man so "grosse" dateimengen am besten hin und her schiebt, und damit arbeitet? oder muss ich sie einfach 100MB weise in den speicher buffern um damit arbeiten zu können. Ich habe schon alles ausprobiert mit der Variablen deklaration, definition, das soll ja angeblich helfen, hat es aber nicht? Also was mach ich falsch?
ps.
ich habe leider auch nicht genügent Assembler kenntnisse um so Speichergeschichten schön zu lösen... aber wenn jemand das von euch hat, dann bedanke ich mich für jeden tipp.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.03.2003, 13:24 Uhr
~tesla
Gast


oder gibts da vieleicht unter linux einige tricks wei mal sowas beschleunigt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.03.2003, 13:50 Uhr
~0xdeadbeef
Gast


Naja, anderthalb Gigabyte Dateien im Speicher zu halten ist schon ein bisschen wahnsinnig. Der Effekt den du hast, ist, dass dir der RAM ausgeht und der Kernel anfängt, auf Platte zu swappen, und die ist natürlich deutlich langsamer als der RAM.
Wenn du Geschwindigkeit willst, wirst du darauf achten müssen, dass dir der Speicher nicht ausgeht, m.a.W. du musst die Dateien in Teile stückeln. 100 MB scheint mir immer noch ziemlich groß zu sein, aber es wäre ein Anfang.

Was genau willst du denn machen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.03.2003, 14:40 Uhr
~Tesla
Gast


Ich bin am verschlüsseln mit einem spezialfall des Vegenere-verfahrens "one-Time-Tape" (das einzige verfahren das mathematisch teoretisch unknackbar ist) und da muss der schlüssel genauso lang sein wie die zu verschlüsselnde datei... das heist ich habe die datei die Verschlüsselt wird im speicher den schlüssel, und die verschlüsselte datei, wenn nun ein Programm 500mb gross ist ist das wie schon gesagt ein problehm...
Ich dachte einfach nur das man indem man Variablen irgentwie vordefiniert vieleicht ein paar sekunden rausholen kann mit "Register" oder mit "auto" oder "static" soll das ja geht... ist in C++ aber zimlich kompliziert find ich....
kannst du mir da nen tip geben?
vielen Danke für das interesse!!
MFG Tesla
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.03.2003, 10:36 Uhr
~0xdeadbeef
Gast


Au weia. Ich kenne das Verfahren grad nicht, gibts ne mathematische Möglichkeit, das ganze gestückelt zu behandeln?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.03.2003, 23:16 Uhr
NemoEimi




Zitat:
~Tesla postete
Ich bin am verschlüsseln mit einem spezialfall des Vegenere-verfahrens "one-Time-Tape" (das einzige verfahren das mathematisch teoretisch unknackbar ist) und da muss der schlüssel genauso lang sein wie die zu verschlüsselnde datei... das heist ich habe die datei die Verschlüsselt wird im speicher den schlüssel, und die verschlüsselte datei, wenn nun ein Programm 500mb gross ist ist das wie schon gesagt ein problehm...


Speicherplatzprobleme musst Du beim Verschlüsseln eines langen Textes mit Hilfe eines one-time-pads jedenfalls nicht bekommen, denn ist C der verschlüsselte Text, P der Plaintext und K das one-time-pad und sind C(i), P(i) und K(i) jeweils die i-ten Bits davon, dann gilt mit dem angegebenen Verfahren, daß C(i) = P(i) xor K(i), d.h. zum Verschlüsseln des Textes oder zum Entschlüsseln einer Nachricht muss prinzipiell jeweils zu einem bestimmten Zeitpunkt nur genau ein Bit des zu verarbeitenden Textes und des Schlüssels im Arbeitsspeicher gehalten werden. Um den Zeitverbrauch der notwendigen Plattenzugriffe zu minimieren, würde ich empfehlen, den Text und den Schlüssel jeweils in erheblich größeren Blocks von vielleicht hundert Kilobytes einzulesen/zu schreiben, aber Speicherprobleme hast Du auch dann noch nicht.
Für viel problematischer hielte ich die Tatsache, daß einerseits die notwendigen one-time-pads durch echte Zufallsprozesse generiert worden sein müssen, damit der Beweis, daß das Verfahren sicher ist, wie bekannt durchgeht, und daß andererseits auf der Empfängerseite der gleiche einige hundert MB große Wegwerfschlüssel auf der Festplatte liegen muss wie beim Sender.

Grüße,
NemoEimi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.03.2003, 10:12 Uhr
Tesla



Ja gut das mit dem bit weisen verschlüsseln habe ic auch schon versucht, so habe ich angefngen, da das aber noch länger dauert, habe ich immer 100mb in den speicher kopiert, da das insgesammt 300M macht, und ich 1GB speicher habe gibt es da also kein problem, es ist nur so das, da ich ein Protokoll aus der ganzen geschichte machen will, um damit echtzeit verschlüsselung übers Internet zu betreiben, und da ist das ja so das man immern nur ein Paket verschlüsseln muss, was ja bekanntlich 1 k gross ist, nun da habe ich kein speicherproblem, aber wenn ich ganze CDs verschlüsseln will, um sie gefahrenfrei zu tranzportieren, dann habe ich das problem das er auf plate swapt. na ja eigentlich ist es auch so das mein mitbewohner das selbe programm in Delphi geschrieben hat, und das bei ihm irgentwie schneller läuft. Also muss es da doch auch in C ne bessere lösung geben oder?
Nochmals vielen danke für eucher interesse
MFG Tesla
--

C++:
if(rpc_reg(RUSERSPROG, RUSERSVERS,
        RUSERSPROC_NUM, rusers,
        xdr_void, xdr_u_long,
        "visible") == -1) {fprintf(stderr, "Couldn'tRegister\n");
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.03.2003, 12:47 Uhr
~0xdeadbeef
Gast


Zeig mal den Code her.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
31.03.2003, 15:11 Uhr
Tesla



Also so sieht das aus, warscheinlich werdet ihr euch jetzt amarsch lachen?

C++:
#include <iostream.h>
#include <math.h>
#include <fstream.h>
#include <stdlib.h>
#include <string>
#include <time.h>
#define TRUE    1
#define FALSE    0
void ckey ();
void verschlusseln ();
void entschlusseln ();

int main ()
    {
    int s;
    cout << " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n + Dies ist ein Programm das mit dem One-time-tape-Verfahren + \n + verschlüsseln soll.                                      + \n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
    cout << " 1. Create a Key \n 2. Verschlüsseln\n 3. Entschlüsseln\n 0. Exit \n";
    cin >> s;
    switch (s)
        {
        case 0:
            {
            break;
            }
        case 1:
            {
            ckey ();
            break;
            }
        case 2:
            {
            verschlusseln ();
            break;
            }
        case 3:
            {
            entschlusseln ();
            break;
            }
        }


    return 0;
    }

void ckey ()
    {
    using namespace std;
    string str;
    char a;
    ofstream key ("key.txt", ofstream::binary);
    cout << "Länge des Schlüssels in MB angeben: ";
    int s;
    cin >> s;
    int size;
    size = s*1024*1024;
    char * buffer;
    buffer = new char [size];
    static int first_time = TRUE;
            if (first_time)
                {
                first_time = FALSE;
                srand((unsigned int)time(NULL));
                }
    if (key.is_open ())
        {
        for (int i = 0; i < s*1024*1024; i++)
            {
            buffer[i] = (char) rand();
            }
            key.write (buffer,size);
            key.close ();
            delete[] buffer;
        }
    }
void verschlusseln ()
    {
    char a,b;
    ifstream key ("key.txt");
    ifstream data ("data.txt");
    ofstream data2 ("data2.txt");
    int size1, size2, c;
    key.seekg (0, ifstream::end);
    size1=key.tellg();
    key.seekg(0);
    data.seekg (0, ifstream::end);
    size2=data.tellg();
    data.seekg(0);
    char * buffer1;
    char * buffer2;
    char * buffer3;
    buffer1 = new char [size1];
    buffer2 = new char [size2];
    buffer3 = new char [size2];
    if (! (key.is_open()) && (data.is_open())&& (data2.is_open()))
        {
        cout << "Fehler beim öffnen der Dateien";
        exit (1);
        }
    if ((key.is_open()) && (data.is_open()) && (data2.is_open()))
    key.read (buffer1,size1);
    data.read (buffer2,size2);
    for (int i = 0; i < size2; i++)
        {
        a = buffer1[i];
        b = buffer2[i];
        c = (int)a+(int)b;
        buffer3[i] = (char)c;
        }
    /*while ((data.get(a)) && (key.get(b)))
        {
        c = (int)a+(int)b;
        data2 << c;
        }*/

    data2.write (buffer3,size2);
    data2.close ();
    key.close ();
    data.close ();
    delete[] buffer1;
    delete[] buffer2;
    delete[] buffer3;
    }
void entschlusseln ()
    {
    char a,b;
    ifstream key ("key.txt");
    ifstream data2 ("data2.txt");
    ofstream data3 ("data3.txt");
    int size1, size2, c;
    key.seekg (0, ifstream::end);
    size1=key.tellg();
    key.seekg(0);
    data2.seekg (0, ifstream::end);
    size2=data2.tellg();
    data2.seekg(0);
    char * buffer1;
    char * buffer2;
    char * buffer3;
    buffer1 = new char [size1];
    buffer2 = new char [size2];
    buffer3 = new char [size2];
    if (! (key.is_open()) && (data2.is_open())&& (data3.is_open()))
        {
        cout << "Fehler beim öffnen der Dateien";
        exit (1);
        }
    if ((key.is_open()) && (data2.is_open()) && (data3.is_open()))
    key.read (buffer1,size1);
    data2.read (buffer2,size2);
    for (int i = 0; i < size2; i++)
        {
        a = buffer1[i];
        b = buffer2[i];
        c = (int)a+(int)b;
        buffer3[i] = (char)c;
        }
    /*while ((data.get(a)) && (key.get(b)))
        {
        c = (int)a+(int)b;
        data2 << c;
        }*/

    data3.write (buffer3,size2);
    data2.close ();
    key.close ();
    data3.close ();
    delete[] buffer1;
    delete[] buffer2;
    delete[] buffer3;
    }


data ist dabei der zuverschlüsselnde text, kex natürlich der schlüssel und data2 der verschlüsselte text und data3 die wieder entschlüsselte version.
bringt das euch weiter?
MFG Tesla
--

C++:
if(rpc_reg(RUSERSPROG, RUSERSVERS,
        RUSERSPROC_NUM, rusers,
        xdr_void, xdr_u_long,
        "visible") == -1) {fprintf(stderr, "Couldn'tRegister\n");
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: