Tråd bedømmelse:
  • 0 Stemmer - 0 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
C/C++ lille introduktion til Xor kryptering
19-05-2020, 15:21 (Denne besked var sidst ændret: 19-05-2020, 15:22 af evil.)
#7
C/CPP XOR
https://www.shellsec.pw/traad-c-c-lille-...kryptering

Q: Hvad skal jeg bruge det til?
A: OTP keystreams

otp_keystream [ -k key ] || [ -K keystream [-o offset]] < in_file > out_file / pipe / etc

# dd if=/dev/sda bs=$((1024*1024*10)) | ./otp_keystream -K bigrandom | nc -v yesyoumayhaveacopy.com 10101
Kode:
/* begin otp_keystream.c */
FILE *keystream = NULL;

int
main(int argc, char *argv[]) {
 char c;
 char k;
 char b;
 char opt;
 char *usage = "Usage: xor [-k key ] || [ -K keystream [-o offset]] < stdin > stdout";
 char *key = NULL;
 int key_len = 0;
 int key_it = 0;
 int key_mode = 0;
 int keystream_mode = 0;
 long long int key_offset = 0;
 long long int out_offset = 0;

 while ( ( opt = getopt (argc, argv, "k:K:o:") ) != -1 ) {
   switch(opt) {
   case 'o':
     key_offset = atol (optarg);
     break;
   case 'K':
     keystream = fopen (optarg, "r");
     if(!keystream) {
       fprintf(stderr,"FATAL: Cannot open '%s' for reading.\n", optarg);
       return(1);
     }
     keystream_mode++;
     break;
   case 'k':
     key = strndup (optarg, strlen (optarg));
     key_len = strlen (optarg);
     key_mode++;
     break;
   }
 }
 argv += optind;
 argc -= optind;
 
 if(!key_mode && !keystream_mode) {
   fprintf(stderr, "%s\n", usage);
   return(1);
 }
 
 if(key_mode) {
   while ( (c = getc (stdin)) != EOF ) {
     b = (c^key[key_it++]);
     putc (b, stdout);
     if(key_it==key_len)
       key_it = 0;
   }
 }
 else if(keystream_mode) {
   while (( fread ((char *)&c, 1, sizeof (char), stdin)) != 0 ) {
     key_offset += fread ((char *)&k, 1, sizeof (char), keystream);
     b = (c^k);
     out_offset += fwrite ((char *)&b, 1, sizeof (char), stdout);
     if(key_offset != out_offset) {
       fprintf (
                stderr,
                "FATAL: Input length exceeds length of keystream (%lli).\n",
                key_offset
                );
       return(1);
     }
   }
   fprintf (stderr, "Keystream offset=%lli\n", key_offset);
 }
}
/* end otp_keystream.c */
Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »


Beskeder i denne tråd
C/CPP XOR - af evil - 19-05-2020, 15:21



User(s) browsing this thread: