gpt4 book ai didi

c - 处理器和协处理器之间的加密区别

转载 作者:太空狗 更新时间:2023-10-29 15:09:00 25 4
gpt4 key购买 nike

我正在尝试使用加密和解密算法来处理一个问题,我使用下面的程序来测试我的要求,然后我发现了一个奇怪的问题。

我正在使用 polarssl 来满足我的加密和解密需求。

当我使用以下命令在英特尔处理器上使用 icc 编译器编译该程序时,该程序运行良好:(来自 polarssl 的 aes.c)

icc Deneme.c aes.c -o deneme

输出:

Encryption result, encrypted value:
11 22 7 86 a2 d3 ed 95 b9 14 c0 57 f7 af 5f dc 93 66 77 68 44 12 9f 1b 72 6a ea 51 b8 f7 1d a4
Decryption result, plain array:
a2 d8 69 9c 77 73 c7 5e 1d 3b 83 26 6e 2f 35 30 9d f0 f2 e5 0 0 0 0 0 0 0 0 0 0 0 0

当我尝试使用 icc 编译器进行编译但这次是在微处理器上运行时;加密结果不正确。

命令:

icc -mmic Deneme.c aes.c -o deneme

输出:

Encryption result, encrypted value:
4a 4b 4c 32 e0 ef fb 22 4a 67 7e 2c 3a fe 36 65 4b 5b 18 9 63 28 a1 c4 8e b7 e4 c6 33 a7 36 7c
Decryption result, plain array:
a2 d8 69 9c 77 73 c7 5e 1d 3b 83 26 6e 2f 35 30 9d f0 f2 e5 0 0 0 0 0 0 0 0 0 0 0 0

是什么让我的加密值不同??

这里是完整的程序

#include <stdio.h>
#include <polarssl/aes.h>

const int ENCRIPTION = 1;
const int DECRIPTION = 0;

void printByteArray(unsigned char * array, int length) {
int i = 0;
for (i = 0; i < length; i++) {
printf("%x ", array[i]);
}
printf("\n");
}

void encrypt() {
unsigned char o[32];


unsigned char key[16] = { 0x03, 0xC9, 0xD8, 0xE6, 0x01, 0xA5, 0x05,
0x9F, 0x11, 0xBF, 0x44, 0x9D, 0xF9, 0x55, 0x18, 0xED

};

unsigned char iv[16] = { 0x03, 0xB5, 0x62, 0x57, 0xC8, 0x69, 0x22, 0x89,
0xF4, 0x96, 0x2B, 0x05, 0x44, 0x2B, 0xD0, 0xA7

};

unsigned char plain[32]=
{
0xA2, 0xD8, 0x69, 0x9C, 0x77, 0x73, 0xC7, 0x5E, 0x1D, 0x3B, 0x83, 0x26, 0x6E, 0x2F, 0x35, 0x30,
0x9D, 0xF0, 0xF2, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

aes_context aesCtx;

aes_setkey_enc(&aesCtx, key, 128);
aes_crypt_cbc(&aesCtx, ENCRIPTION, 32, iv, plain, o);

printf("Encryption result, encrypted value:\n");
printByteArray(o, 32);
}

decrypt() {

unsigned char o[32];

unsigned char key[16] = { 0x03, 0xC9, 0xD8, 0xE6, 0x01, 0xA5, 0x05,
0x9F, 0x11, 0xBF, 0x44, 0x9D, 0xF9, 0x55, 0x18, 0xED

};

unsigned char iv[16] = { 0x03, 0xB5, 0x62, 0x57, 0xC8, 0x69, 0x22, 0x89,
0xF4, 0x96, 0x2B, 0x05, 0x44, 0x2B, 0xD0, 0xA7

};

unsigned char encryptedValue[32] = { 0x11, 0x22, 0x07, 0x86,
0xA2, 0xD3, 0xED, 0x95, 0xB9, 0x14, 0xC0, 0x57, 0xF7, 0xAF, 0x5F,
0xDC, 0x93, 0x66, 0x77, 0x68, 0x44, 0x12, 0x9F, 0x1B, 0x72, 0x6A,
0xEA, 0x51, 0xB8, 0xF7, 0x1D, 0xA4 };

aes_context aesCtx;

aes_setkey_dec(&aesCtx, key, 128);
aes_crypt_cbc(&aesCtx, DECRIPTION, 32, iv, encryptedValue,
o);

printf("Decryption result, plain array:\n");
printByteArray(o, 32);

}

int main() {

encrypt();
decrypt();
}

最佳答案

默认情况下,icc 使用代码性能优化,这限制了正确性。但是,您可以使用 -O0 选项在不对两者进行任何优化的情况下进行编译并比较结果。

-mmic 为 MIC 即 Xeon phi 架构生成指令集。

关于c - 处理器和协处理器之间的加密区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com