如何解密此文件:
https://drive.google.com/open?id=1gZCujDYmEL-FZ5o_xBUS-Ng5979HSsZ7
鉴于现有的唯一资料是:
/* C标准*/ #的ISO/IEC9899:1990年版定义RAND_MAX 32767静态无符号长int next = 1;int rand( void ) // RAND_MAX假定为32767 { next = next * 1103515245 + 12345;返回(无符号int)( next /65536) % 32768;}RAND_MAX srand(无符号int种子){next= seed;}包含 #包含 /在rand()密钥流char ()时返回字节(静态int键);静态int i= 0;i=i% 4;if (i == 0) key = rand();返回(( char * )(&key));} int main(int argc,const char * argv[]) {静态字符随机状态;srand(空);文件*输入,*输出;输入= fopen("Homework1b.tex","r");输出= fopen("Homework1b.tex.enc","w");int c,rc;而((c = fgetc(input)) != EOF) { rc=randchar();printf("c=%d (%c)和rc=%d\n",c,c,rc);fputc(c^rc,output);
我读到了C随机的弱点,我知道知道明文的一部分会有帮助,但我无法理解。
发布于 2018-03-24 16:55:30
简单回答:只需将
srand(time(NULL));替换为srand();,然后再对加密的文件进行“加密”以解密。
长答案:这个程序的基本原理是流密码,正如您在标记中已经提到的那样,这意味着纯文本$P$是使用随机密钥流$K$进行的。要撤消此操作,只需再次使用相同的密钥流对密文$C$进行xor,$C \oplus K= (P \oplus K) \oplus K=P_oplus 0= P$证明了这一点。
因此,要重建明文,我们需要通过两种方式重建可以实现的密钥流:
最后,您需要知道加密源的特性,以便您的解密程序能够匹配并正确解密。
https://crypto.stackexchange.com/questions/57799
复制相似问题