【问题标题】:I just wanted to DES 4096 bytes of data with a 128 bits key我只想用 128 位密钥 DES 4096 字节的数据
【发布时间】:2011-01-10 00:21:02
【问题描述】:

...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 是什么,以及我想如何生成它们......

我错过了什么?

【问题讨论】:

  • 为什么要使用 DES,因为它已经损坏和弃用了很长时间?

标签: c cryptography openssl


【解决方案1】:

DES_ede2_cbc_encrypt 是正常选择。至于ivec(一个8字节的数组),它的作用之一是防止相同的消息以可预测的方式加密成相同的密文;如果对手可以从两个密文中判断它们是否加密了相同的明文(或只是相同的初始块),那么他们可能能够使用该信息。因此,您为每条消息使用不同的ivec;它不必是秘密的,只是不同的。如果您确实确定不需要它,可以将其设置为八个零字节。 (例如,如果您只使用一次密钥,那么这样做是安全的。)

【讨论】:

  • 如果我在解密时设置ivec,我猜我必须在加密时设置相同的ivec。 :)
猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多