Files correlati : dninst.txt Ricompilazione Demo : [ ] Commento : Aggiunto dninst.txt, da cifrare in dninst.zip con dncrypt.exe git-svn-id: svn://10.65.10.50/trunk@19866 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			104 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <iostream>
 | |
| #include <fstream>
 | |
| 
 | |
| using namespace std;
 | |
| 
 | |
| const size_t MAXLINE = 256;
 | |
| 
 | |
| void init_key(char key[8])
 | |
| {
 | |
|   for (size_t i = 0; i < 8; i++)  
 | |
|     key[i] = 'A' + ::rand() % 26;
 | |
| }
 | |
| 
 | |
| bool encode_string(const char* linein, char lineout[MAXLINE])
 | |
| {
 | |
|   memset(lineout, 0, MAXLINE);
 | |
|   if (linein && *linein)
 | |
|   {
 | |
|     char key[8]; init_key(key);
 | |
|     size_t i;
 | |
|     for (i = 0; linein[i]; i++)
 | |
|       lineout[i] = linein[i] + (i < 8 ? key[i] : linein[i - 8]);
 | |
|     lineout[i] = '\0';
 | |
|   }
 | |
|   return *lineout >= ' ';
 | |
| }
 | |
| 
 | |
| bool read_line(istream& txt, char line[MAXLINE])
 | |
| {
 | |
|   memset(line, 0, MAXLINE);
 | |
|   while (!txt.eof())
 | |
|   {
 | |
|     txt.getline(line, MAXLINE-1);
 | |
| 
 | |
|     if (line[0] == '/' && line[1] == '/')
 | |
|       continue;
 | |
| 
 | |
|     for (size_t i = 0; line[i]; i++)
 | |
|     {
 | |
|       if (line[i] > ' ')
 | |
|         return true;
 | |
|     }
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| bool write_line(ostream& zip, const char* line)
 | |
| {
 | |
|   bool ok = line && *line;
 | |
|   if (ok)
 | |
|   {
 | |
|     while (*line && *line <= ' ')
 | |
|       line++;
 | |
|     ok = *line > ' ';
 | |
|     if (ok)
 | |
|     {
 | |
|       char lineout[MAXLINE];
 | |
|       encode_string(line, lineout);
 | |
|       zip << lineout << endl;
 | |
|     }
 | |
|   }
 | |
|   return ok;
 | |
| }
 | |
| 
 | |
| /* May be useful at least once 
 | |
| bool write_paragraph(ostream& zip, const char* line)
 | |
| {
 | |
|   bool ok = line && *line;
 | |
|   if (ok)
 | |
|     zip << '[' << line << ']' << endl;
 | |
|   return ok;
 | |
| }
 | |
| */
 | |
| 
 | |
| int main(int argc, char* argv[])
 | |
| {
 | |
|   if (argc <= 1)
 | |
|   {
 | |
|     cerr << "Missing input file (dninst.txt)" << endl;
 | |
|     return 1;
 | |
|   }
 | |
|   if (argc <= 2)
 | |
|   {
 | |
|     cerr << "Missing output file (dninst.zip)" << endl;
 | |
|     return 2;
 | |
|   }
 | |
|   cerr << "Encoding " << argv[1] << " ..." << endl;
 | |
| 
 | |
|   ifstream txt(argv[1]);
 | |
|   ofstream zip(argv[2]);
 | |
|   char line[MAXLINE];
 | |
| 
 | |
|   read_line(txt, line);
 | |
|   ::srand(883);
 | |
|   write_line(zip, line);
 | |
|   ::srand(atoi(line));
 | |
|   while (read_line(txt, line))
 | |
|     write_line(zip, line);
 | |
| 
 | |
|   cerr << "Encoded " << argv[2] << endl;
 | |
|   
 | |
|   return 0;
 | |
| }
 |