我正在寻找Polarssl AES计数器模式的示例。无法在任何地方找到它。
对于像我这样的初学者来说,Documentation很难理解。它在polarssl中定义为
int aes_crypt_ctr (aes_context *ctx, size_t length, size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], const unsigned char *input, unsigned char *output)
我这样写了
aes_context aes;
unsigned char key[32];
unsigned char iv[16];
unsigned char input [128]="Hello";
unsigned char output[128];
size_t input_len = 40;
size_t output_len = 0;
aes_setkey_enc(&aes, key, 128);
aes_crypt_ctr (&aes, 64, size_t *nc_off, unsigned char nonce_counter[16], unsigned char stream_block[16], input, output);
我无法理解加密调用中的某些参数。我正在寻找一个最小的工作示例。
答案 0 :(得分:1)
计数器模式(CTR)与CBC等模式不同,因为它可以在非完整块上运行。如果您在非完整块上使用CBC,则通常会对其进行填充,然后加密流可用于所有目的。您无法在最后添加数据。
CTR在PolarSSL中更有意义并作为流密码实现,并允许您在最后添加其他数据。因此,它现在需要在当前块(nc_off
)内的“位置”。
所以你应该做的是:
iv
重命名为nonce_counter
。size_t nc_offset = 0;
添加到顶部。unsigned char stream_block[16];
添加到顶部。ret = aes_crypt_ctr(&aes, input_len, &nc_off, nonce_counter, stream_block, input, output);
注意:在致电aes_crypt_ctr()
时,nc_off将位于 40%16 = 8 ,表示还剩8个字节stream_block
中aes_crypt_ctr()
可以使用{{1}},如果您决定向流中添加额外数据。