使用openssl C进行AES(aes-cbc-128,aes-cbc-192,aes-cbc-256)加密/解密

我只想用openSSL测试这三种模式的AES:128,192和256密钥长度,但我的解密文本与我的输入不同,我不知道为什么。 此外,当我传递一个巨大的输入长度(比方说1024字节)时,我的程序显示core dumped …我的输入始终是相同的,但它无关紧要,至少现在。 inheritance人代码: #include #include #include #include int main(int argc, char **argv) { int i; int keylength; printf(“Give a key length [only 128 or 192 or 256!]:\n”); scanf(“%d”, &keylength); /* generate a key with a given length */ unsigned char aes_key[keylength]; memset(aes_key, 0, sizeof(aes_key)); if (!RAND_bytes(aes_key, keylength)) { exit(-1); } aes_key[keylength-1] = ‘\0’; […]

逻辑SSE内在函数之间有什么区别?

不同类型的逻辑SSE内在函数之间有什么区别吗? 例如,如果我们采用OR运算,有三个内在函数:_mm_or_ps,_mm_or_pd和_mm_or_si128所有这些都做同样的事情:计算其操作数的按位 OR。 我的问题: 使用一个或另一个内在(使用适当的类型转换)之间是否有任何区别。 在某些特定情况下,是否会有更长的执行等隐藏成本? 这些内在函数映射到三个不同的x86指令(por,orps,orpd)。 有没有人有任何想法为什么英特尔浪费宝贵的操作码空间的几个指令做同样的事情?

C中函数内部的函数

我正在制作一个与此类似的代码: #include double some_function( double x, double y) { double inner_function(double x) { // some code return x*x; } double z; z = inner_function(x); return z+y; } int main(void) { printf(“%f\n”, some_function(2.0, 4.0)); return 0; } 这在GCC中完美编译(没有警告)但无法在ICC中编译。 ICC给出: main.c(16): error: expected a “;” { ^ main.c(21): warning #12: parsing restarts here after previous syntax error […]

&operator在函数指针赋值中可选

在以下代码中: /* mylog.c */ #include #include /* for atoi(3) */ int mylog10(int n) { int log = 0; while (n > 0) { log++; n /= 10; } return log; } int mylog2(int n) { int log = 0; while (n > 0) { log++; n >>= 1; } return log; } int main(int argc, […]

局部变量在C中初始化为零

我认为C中的局部变量没有初始化。 但是当我用gcc编译这段代码时。 void f() { static int s; int n; printf(“static s = %d\n”, s++); printf(“local n = %d\n”, n++); f(); } main() { f(); } 并运行此代码,部分结果是: static s = 0 local n = 0 static s = 1 local n = 0 static s = 2 local n = 0 static s = 3 […]

定义中函数标题后的C变量声明

在阅读一些FreeBSD源代码时(参见: radix.h第158-173行),我发现了定义中“函数标题”之后的变量声明。 这在ISO C(C99)中有效吗? 什么时候应该在生产代码中完成而不是仅仅在“函数标题”中声明变量? 为什么要在这里完成? 我指的是标题字符串的函数,如下所示: int someFunction(int i, int b) {

如何在C(主机名和域信息)中找到当前计算机的完整主机名?

在C项目(POSIX)中,如何获取当前系统的完全限定名称? 例如,我可以通过从unistd.h执行gethostname()来获取我的机器的主机名。 这可能会给我machine3作为回报,但我实际上是在寻找machine3.somedomain.com 。 我如何获取此信息? 如果可能的话,我不想使用system()来执行此操作。

混合SSE整数/浮点SIMD指令时,是否会降低性能?

我最近以内在函数的forms使用了x86 SIMD指令(SSE1234)。 我发现令人沮丧的是SSE ISA有几个简单的指令,只能用于浮点数或仅用于整数,但理论上应该对两者都有相同的效果。 例如,float和double向量都有指令从地址( movhps , movhpd )加载更高的64位128位向量,但是没有这样的整数向量指令。 我的问题: 在整数向量上使用浮点指令时,有没有理由期望性能受到影响,例如使用movhps将数据加载到整数向量? 我写了几个测试来检查,但我认为他们的结果不可信。 编写一个正确的测试来探索这些事情的所有极端情况真的很难,特别是在这里最可能涉及指令调度时。 相关问题: 其他平凡相似的东西也有几个基本相同的指令。 例如,我可以使用por , orps或orpd按位OR。 任何人都可以解释这些附加说明的目的是什么? 我想这可能与应用于每条指令的不同调度算法有关。

读取PPM文件并将其存储在数组中; 用C编码

我需要读取一个PPM文件并将其存储在用C编写的数组中。任何人都可以帮我解决这个问题吗? 非常感谢。

使用OpenSSL API以编程方式validation证书链

这与其他问题非常相似,但我所看到的问题要么没有答案,要么也不会问同样的问题。 我有一个自签名CA证书,以及使用该CA证书签名的另外两个证书。 我很确定证书是正确的,因为’openssl verify’有效: $ openssl verify -CAfile ca.pem server.pem server.pem: OK (以上是从记忆中,我没有它们在我面前,所以它可能稍微偏离)。 现在我想以编程方式validation证书。 我有一个实用函数,下面是伪代码: int verify_cert(X509 *cert, X509 *cacert) { int ret; X509_STORE *store; X509_STORE_CTX *ctx; store = X509_STORE_new(); X590_STORE_add_cert(store, cacert); ctx = X509_STORE_CTX_new(); X509_STORE_CTX_init(ctx, store, cert, NULL); ret = X590_verify_cert(ctx); /* check for errors and clean up */ } 我的问题是上面的代码总是返回“找不到发行者证书”。 我做错了什么? 我相信我正在创建一个新的商店,添加cacert,创建一个新的上下文,并使用指向包含CA的商店的指针将要validation的子证书添加到上下文中。 我显然做错了什么,但我不确定是什么。 […]