首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Polarssl AES计数器模式示例

Polarssl AES计数器模式示例
EN

Stack Overflow用户
提问于 2013-12-28 03:05:57
回答 1查看 1.5K关注 0票数 2

我正在寻找一个Polarssl AES计数器模式的例子。哪儿都找不到。

对于像我这样的初学者来说,文档很难理解。它在polarssl中定义为

代码语言:javascript
复制
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)

我是这样写的

代码语言:javascript
复制
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);

我无法理解调用加密过程中的某些参数。我正在寻找一个最低限度的工作例子。

EN

回答 1

Stack Overflow用户

发布于 2013-12-29 11:42:31

计数器模式(CTR)不同于CBC这样的模式,因为它可以工作在非完整块上。如果在非完整块上使用CBC,通常会填充CBC,然后加密流就会结束。不能在末尾添加数据。

CTR更多地意味着并实现为PolarSSL中的流密码,并允许您在最后修改其他数据。因此,它需要现在“在”当前块(nc_off)中的位置。

所以你应该做的是:

  1. 为了清晰起见,将iv重命名为nonce_counter
  2. size_t nc_offset = 0;添加到顶部。
  3. unsigned char stream_block[16];添加到顶部。
  4. 在nonce_counter中放置一个随机值(这是您的nonce +计数器在当前)使用类似于CTR的东西。您可以检查这个关于向代码中添加随机生成器的文章
  5. 如果您想做一个单独的调用: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()使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20810594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档