struct ctr_state
{
unsigned char ivec[16];
unsigned int num;
unsigned char ecount[16];
};
int init_ctr(struct ctr_state *state, const unsigned char iv[16])
{
state->num = 0;
memset(state->ecount,0,16);
memset(state->ivec + 8, 0, 8); /* Copy IV into 'ivec' */
memcpy(state->ivec, iv, 8);
return 0;
}
struct ctr_state state;
void ctr_encrypt(const size_t encslength, AES_KEY key, int length)
{
init_ctr(&state, iv);
unsigned char my_data[16], output[16];
AES_set_encrypt_key((unsigned char*)rkey, 256, &key);
for (int i=1; i<encslength/16+1; i++)
{
memset(my_data,0,16);
memcpy(my_data,plaintext+((i-1)*16),16);
AES_ctr128_encrypt((unsigned char*)my_data, (unsigned char*)output, 16, &key, state.ivec, state.ecount, &state.num);
memcpy(ciphertext+((i-1)*16),output,16);
}
hexdump(stdout, "ciphertext", (unsigned char*)ciphertext, length);
}
void ctr_decrypt(const size_t encslength, AES_KEY key, int length)
{
init_ctr(&state, iv);
unsigned char my_data[16], output[16];
AES_set_encrypt_key((unsigned char*)rkey, 256, &key);
for (int i=1; i<encslength/16+1; i++)
{
memset(my_data,0,16);
memcpy(my_data,ciphertext+((i-1)*16),16);
AES_ctr128_encrypt((unsigned char*)my_data, (unsigned char*)output, 16, &key, state.ivec, state.ecount, &state.num);
memcpy(checktext+((i-1)*16),output,16);
}
hexdump(stdout, "checktext", (unsigned char*)checktext, length);
}
AES 256 CTR Encryption/Decryption
最新推荐文章于 2026-06-25 11:30:55 发布
本文深入探讨了AES 256位CTR模式的加密和解密过程,介绍了CTR模式的工作原理,以及它如何提供高效且安全的数据加密。内容包括密钥生成、初始化向量的使用以及在实际应用中的注意事项。

3860

被折叠的 条评论
为什么被折叠?



