我正在寻找一个Polarssl AES计数器模式的例子。哪儿都找不到。
对于像我这样的初学者来说,文档很难理解。它在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);我无法理解调用加密过程中的某些参数。我正在寻找一个最低限度的工作例子。
发布于 2013-12-29 11:42:31
计数器模式(CTR)不同于CBC这样的模式,因为它可以工作在非完整块上。如果在非完整块上使用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,这表明如果您决定向流中添加额外的数据,stream_block中仍有8个字节可供aes_crypt_ctr()使用。
https://stackoverflow.com/questions/20810594
复制相似问题