CTR-AES256加密不匹配OpenSSL-AES-256-ctr
我尝试了以下用于AES-128-CTR加密的Openssl EVP函数的C实现,但与命令行Openssl结果相比,我得到的结果不正确。
奇怪的是,当我尝试使用较大大小的明文(600字节或更多)时,C代码和命令行之间只有最后600字节的密码不同。如果需要,我也可以将结果粘贴到这里。
AES-128-CTR的C代码实现
static const unsigned char key[16] = {
0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b,
0x0c, 0x0d, 0x0e, 0x0f,
};
static const unsigned char iv[16] = {
0x01, 0x23, 0x45, 0x67,
0x89, 0xab, 0xcd, 0xef,
0x88, 0x88, 0x88, 0x88,
0xC0, 0x00, 0x00, 0x00,
};
FILE *fp_output = fopen("cipherCode.bin", "wb");
// Encrypt Plaintext
EVP_CIPHER_CTX *ctx;
int outlen;
unsigned char cipher[size];
if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors();
if(!(EVP_EncryptInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv))) handleErrors();
if(!(EVP_EncryptUpdate(ctx, cipher, &outlen, plaintext, size))) handleErrors();
if(!(EVP_EncryptFinal_ex(ctx, cipher + outlen, &outlen))) handleErrors();
/*---Edit----
// EVP_CIPHER_CTX_set_padding(ctx, 0); <-- removed this as it isnt necessary
-----------*/
EVP_CIPHER_CTX_free(ctx);
// Write result cipher into output file
fwrite((unsigned char *)&cipher[0], outlen, 1, fp_output);
fclose(fp_output);
OpenSSL命令行:
openssl enc -aes-128-ctr -in plaintext.bin -out cipherCL.bin -K 000102030405060708090a0b0c0d0e0f -iv 0123456789abcdef88888888c0000000 -p -nopad
相同的明文,键和IV用于两者。
输入:
Plaintext:
0000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
输出:
Hexdiff(为清楚起见缩写):
Visuel HexDiff v 0.0.53 by tTh 2007 dec 7bits
0 00 00 00 00 00 00 00 00 10 90 66 01 00 00 00 00 f
** cipherCode.bin 16 0 0%
0 1e a4 43 3f d8 4c 8c b7 1a e7 f0 af 85 0c d2 c2 C? L
** cipherCL.bin 16 0 0%
我建议你使用这个免费的AES库链接
它是用c编写的AES ECB、CTR和CBC加密算法的小型便携式实现。它包含了你需要的一切,而且非常简单。顺便说一句,您可以通过在esi. h
中定义符号AES192或AES256,用192或256位覆盖默认的128位密钥大小。
我在我的程序中发现了这个问题。我没有将密码变量定义为静态变量。现在我将其定义为静态,正确的密码数据将写入该文件。
为什么静电起作用?我调用了一个加密函数来计算密码,然后返回密码。由于密码未声明为静态,因此退出函数后会丢失其值,因此返回的数据与密码中的数据不同。将cipher声明为静态后,函数调用后保留cipher的值,并在文件中写入正确的信息。
问题内容: 我想直接在命令行执行单个php语句,而不必使用单独的php文件。 这怎么可能 ? 问题答案: 如果您要在命令行中使用PHP,建议您安装 phpsh,这是一个不错的PHP shell。这很有趣。 无论如何,php命令提供了 两个开关来从命令行执行代码 : 您可以这样使用php的 -r开关 : 上面的PHP命令应该 输出 并 返回, 如您所见: 另一个有趣的开关是 php -a : 与 p
我没有得到“你好”:请想知道为什么和做什么
我遵循以下指示https://code.visualstudio.com/docs/setup/mac但我没有成功。这就是我进去时发生的事情 我得到了以下信息: 我还查找了以下问题:如何在OSX上从命令行打开Visual Studio代码?,这没用。 我在VSCode中只有一个终端选项,zsh。
我正在尝试调试我的Android应用程序。当调试器到达view.java文件时,我会收到“源代码与字节码不匹配”的消息。我可以看到调试器在文件的错误部分。有人知道怎么修吗? 我正在Android10(API29)设备上调试。在Android Studio首选项->外观和行为->系统设置->Android SDK中,我已经确保所有内容都是最新的。我还多次清理和重建,删除缓存,重新启动Android
我的应用程序崩溃了,我的设备上有一个NPE。在使用ACRA接收的堆栈跟踪中,行号引用了两个源代码类和。对于,没有一个行号与任何源代码版本中的行号匹配。我的设备没有自定义ROM。这是一款运行Android4.03的Galaxy S2。 下面是堆栈跟踪: 如果查看不同版本的源代码,您可以自己检查数字是否匹配。 例如,在Android4.03的源代码中,位于第1892行,而我的堆栈跟踪显示它位于第202
命令“code”。在这本手册里不起作用? 之前的所有其他步骤都奏效了。如何调用OSX终端中的Visual Studio代码?