我只想用128位密钥来DES 4096字节的数据

时间:2011-01-10 00:21:03

标签: c cryptography openssl

...... OpenSSL的好人们给我提供的是this.:)

现在,since you shouldn't be guessing when using cryptography,我来这里确认:我想要使用的函数调用是什么?


我的理解

128位密钥是16字节大,所以我需要双DES(2×8字节)。这让我只有几个函数调用:

void DES_ede2_cfb64_encrypt(const unsigned char *in,
       unsigned char *out, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_cblock *ivec, int *num, int enc);

void DES_ede2_cbc_encrypt(const unsigned char *input,
       unsigned char *output, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_cblock *ivec, int enc);

void DES_ede2_cfb64_encrypt(const unsigned char *in,
       unsigned char *out, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_cblock *ivec, int *num, int enc);

void DES_ede2_ofb64_encrypt(const unsigned char *in,
       unsigned char *out, long length, DES_key_schedule *ks1,
       DES_key_schedule *ks2, DES_cblock *ivec, int *num);

在这种情况下,我猜测我要调用的函数DES_ede2_cfb64_encrypt,虽然我不太确定 - 我绝对不需要在这里填充,我有关心ivecnum是什么,以及我想如何生成它们......

我错过了什么?

1 个答案:

答案 0 :(得分:3)

DES_ede2_cbc_encrypt是正常的选择。至于ivec(一个8字节的数组),它的一个功能是防止同一个消息以可预测的方式加密到同一个密文;如果攻击者可以从两个密文中分辨出他们是否加密相同的明文(或者只是相同的初始块),他们就可以使用该信息。因此,您为每条消息使用不同的ivec;它不必是秘密,只是不同。如果您确定不需要它,可以将其设置为八个零字节。 (例如,如果您只使用一次密钥,则可以安全地执行此操作。)