Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Visual Studio和Openssl进行AES 256 CTR加密/解密_C_Encryption_Openssl_Aes - Fatal编程技术网

使用Visual Studio和Openssl进行AES 256 CTR加密/解密

使用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

你好,先生!我正在尝试使用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 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?请咨询