我正在尝试分析一个简短的加密程序,并找出它正在使用的机制。
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char * argv[] ) {
long int key;
char * endptr;
key = strtol( argv[1], &endptr, 10 );
srandom( key );
{ /* now copy input to output through crypt transformation */
char ch;
while (!feof( stdin )) {
putc( (getc(stdin) ^ random())&0xFF, stdout );
}
fclose( stdout );
}
}
我可以简单地遵循这一点,但我在努力清除它正在使用的机制时遇到了麻烦..
我正在看以下内容:
http://en.wikipedia.org/wiki/Public-key_cryptography
http://en.wikipedia.org/wiki/Block_cipher
http://en.wikipedia.org/wiki/Stream_cipher
http://en.wikipedia.org/wiki/Diffie-Hellman
我倾向于迭代的块密码,但我现在还不知道。
答案 0 :(得分:2)
这是一个流密码。密钥是通过给定密钥播种srandom而生成的。
在密码学中,流密码是一种 对称密钥密码,明文 比特与伪随机数组合 密码比特流(密钥流), 通常由排他性或(xor) 操作。在流密码中 明文数字加密一个 一时间,和转型 连续数字在 加密。
你在这里做的是什么。 key
是对称密钥,密码流由random()生成。对srandom(key)的调用确保只要你的密钥相同,随机流就会一样。
答案 1 :(得分:2)
您需要在脑海中清楚地区分类别中的密码。有:
以上只能通过他们接受的输入大小来区分密码;它与用于生成加密文本的机制无关。
关于这种机制,我们有:
所以首先尝试回答这个问题:
您的示例是流密码还是分组密码?请记住,这与如何加密无关!