Homework 1b: The Linear Congruence rand() Function in C


This homework is a practical cyber-security problem where you will attempt to break the code that has been implemented using a pseudo-random number generator. The LaTeX source of your homework has been encrypted using the following C program and (Attached ). Note that based on Kerckhoff’s Principle, the encryption algorithm is public.

The homework was generated using the following code:


/* The ISO/IEC 9899:1990 edition of the C standard */

#define RAND_MAX 32767

static unsigned long int next = 1;

int rand(void) // RAND_MAX assumed to be 32767


next = next * 1103515245 + 12345;

return (unsigned int)(next/65536) % 32768;


void srand(unsigned int seed)


next = seed;



#include <stdio.h>

#include <time.h>


//Return a byte at a time of the rand() keystream

char randchar() {

static int key;

static int i = 0;


i = i % 4;

if (i == 0) key = rand();

return ((char *)(&key))[i++];



int main(int argc, const char* argv[]) {

static char randstate[64];



FILE *input, *output;

input = fopen(“Homework1b.tex”, “r”);

output = fopen(“Homework1b.tex.enc”, “w”);


int c,rc;

while ((c = fgetc(input)) != EOF) {


printf(“c=%d (%c) and rc=%dn”,c,c,rc);








The encrypted file for Windows OS:

The encrypted file for Mac OS :



Hint: The original file was in LaTeX.


  • You may use any programming language to produce the plaintext from the provided ciphertext.
  • Please submit a copy of your program and describe how you solved the problem in your homework submission.


        $10 per 275 words - Purchase Now