2012-10-16 16 views
5

में एक प्रोग्राम चला रहा है मेरे पास एक प्रोग्राम है जो एक बार पैड एन्क्रिप्शन का उपयोग करके दो फाइलों को एक साथ जोड़ता है। चूंकि कीफाइल इस तरह की संवेदनशील प्रकृति का है, मैं नहीं चाहता कि कीफाइल के किसी भी निशान कंप्यूटर हार्ड ड्राइव पर दिखाई दे क्योंकि यह सुरक्षा समझौता कर सकता है।सी - रैम

सवाल है, मैं कैसे रैम में कार्यक्रम चला सकता हूँ इतनी के रूप में किसी भी निशान से बचने के लिए पर HD छोड़ दिया जा रहा? वैकल्पिक रूप से, फ्लैश ड्राइव से प्रोग्राम चलाने से फ्लैश ड्राइव में कीफाइल का निशान होता है?

नीचे कैसे keyfile कार्यक्रम में इलाज किया जाता है:

/* Check if keyfile can be opened. */ 
if((keyfile = fopen(argv[3], "rb"))== NULL) 
{ 
printf("Can't open keyfile.\n"); 
printf("Please enter a valid filename.\n"); 
printf("USAGE: OTP <source file> <output file> <keyfile>\n"); 
perror("Error"); 
return(1); 
}        

/* Get size of keyfile */ 
fstat(fileno(keyfile), &keybuf); 

/* Check if keyfile is the same size as, or bigger than the sourcefile */ 
if((keybuf.st_size) < (statbuf.st_size)) 
{ 
printf("Source file is larger than keyfile.\n"); 
printf("This significantly reduces cryptographic strength.\n"); 
printf("Do you wish to continue? (Y/N)\n"); 
fgets(buffer, 20, stdin); 
sscanf(buffer, "%c", &ans); 
if(ans == 'n' || ans == 'N') 
{ 
return (1); 
} 
if(ans == 'y' || ans == 'Y') 
{ 
    printf("Proceeding with Encryption/Decryption.\n"); 
    } 

/* Encrypt/Decrypt and write to output file. */ 
while(count < (statbuf.st_size)) 
{ 
key=fgetc(keyfile); 
data=fgetc(sourcefile); 

output=(key^data); 

fputc(output,destfile); 
count++; 
} 

/* Close files. */ 
fclose(keyfile); 
fclose(sourcefile); 
fclose(destfile); 

मैं जब इस googling, लेकिन यह है कि मैं क्या जरूरत होने के लिए नहीं मालूम था एक inram समारोह में आए।

उत्तर

4

मैं तुम्हें कुछ बाहरी मीडिया से keyfile पढ़ रहे हैं मान लेते हैं और आप इस प्रक्रिया OTP युक्त आई/ओ बफ़र्स के साथ डिस्क के लिए बदली जा रही के बारे में चिंतित हैं। आप लिखे जाने वाले सादे पाठ के बारे में शायद ही चिंतित हैं। यदि आप पॉज़िक्स सिस्टम (लिनक्स की तरह) पर हैं तो आपको mlock और mlockall फ़ंक्शंस में देखना चाहिए। ये कॉल मेमोरी पेज को रैम में लॉक कर देंगी और डिस्क पर अपने स्वैपिंग को प्रतिबंधित कर देंगी। मैन पेज विशेष रूप से इन कॉल के लिए सुरक्षा उपयोग केस को बुलाता है। एक और विकल्प mmap फाइलों के लिए हो सकता है। हालांकि इसमें एक ही गारंटी नहीं है, क्योंकि मैप किए गए पृष्ठों को बाहरी मीडिया द्वारा समर्थित किया जाएगा, मुझे संदेह है कि वे स्वैप स्पेस में दिखाई देंगे।

+0

धन्यवाद! ऐसा लगता है कि मुझे वही चाहिए। आपकी धारणाएं काफी सही थीं। – youjustreadthis

+0

हाय फिर, मैं हाल ही में एक और धागा है: http://stackoverflow.com/questions/12990214/is-this-usage-of-mlockall-correct#12990658 और एक भ्रमित जवाब है कि लग रहा था खंडन करने के लिए आप क्या है मिल गया यहाँ कहा। क्या आप संभवतः एक नज़र डालें और जवाब पर अपनी राय दे सकते हैं? @ गीफ रेडी – youjustreadthis

संबंधित मुद्दे