使用Visual Studio和Openssl进行AES 256 CTR加密/解密
你好,先生!我正在尝试使用aes ctr和256位密钥对字符串进行加密和解密。下面是我发布的代码。我遗漏了一些东西,但我不知道是什么。解密产生的校验文本与明文不同。提前谢谢使用Visual Studio和Openssl进行AES 256 CTR加密/解密,c,encryption,openssl,aes,C,Encryption,Openssl,Aes,你好,先生!我正在尝试使用aes ctr和256位密钥对字符串进行加密和解密。下面是我发布的代码。我遗漏了一些东西,但我不知道是什么。解密产生的校验文本与明文不同。提前谢谢 struct ctr_state { unsigned char ivec[16]; unsigned int num; unsigned char ecount[16]; }; int init_ctr(struct ctr_state *state, const unsigned c
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_decrypt_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);
}
结构中心状态
{
无符号字符ivec[16];
无符号整数;
无符号字符计数[16];
};
int init_ctr(struct ctr_state*state,const unsigned char iv[16])
{
状态->数值=0;
memset(state->ecount,0,16);
memset(state->ivec+8,0,8);/*将IV复制到“ivec”*/
memcpy(州->ivec,iv,8);
返回0;
}
结构中心状态;
无效ctr_加密(常量大小加密长度、AES_密钥、整数长度)
{
初始中心(和状态,iv);
无符号字符my_数据[16],输出[16];
AES加密密钥((无符号字符*)rkey、256和密钥);
对于(int i=1;i在解密过程中,替换
AES_set_decrypt_key((unsigned char*)rkey, 256, &key);
与
在解密过程中,替换
AES_set_decrypt_key((unsigned char*)rkey, 256, &key);
与
@SLaks抱歉。解密产生的Checktext与明文不同。@SLaks抱歉可能重复。解密产生的Checktext与明文不同。可能重复确实有效。据我所知,AES_set_decrypt_key似乎只在某些模式下工作。(它适用于AES cbc)。非常感谢!我也在寻找使用c#的AES 256加密/解密CTR模式。使用这个或dotnet中的一些新库是一个好主意吗?请注意,确实有效。据我所知,AES_set_decrypt_密钥似乎只在某些模式下有效。(它适用于AES cbc)。非常感谢!我也在寻找AES 256加密/解密与CTR模式使用c#。这是一个好主意,使用这个或一些新的图书馆来dotnet?请咨询