...... 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
,虽然我不太确定 - 我绝对不需要在这里填充,我有关心ivec
和num
是什么,以及我想如何生成它们......
我错过了什么?
答案 0 :(得分:3)
DES_ede2_cbc_encrypt
是正常的选择。至于ivec
(一个8字节的数组),它的一个功能是防止同一个消息以可预测的方式加密到同一个密文;如果攻击者可以从两个密文中分辨出他们是否加密相同的明文(或者只是相同的初始块),他们就可以使用该信息。因此,您为每条消息使用不同的ivec
;它不必是秘密,只是不同。如果您确定不需要它,可以将其设置为八个零字节。 (例如,如果您只使用一次密钥,则可以安全地执行此操作。)