我正在研究C中的一个跨平台(Windows和Mac OS X)代码,它需要使用带有CBC的AES-256和128位的块大小来加密/解密blob.在各种库和API中,我选择了OpenSSL.
然后,这段代码将使用多部分形式的PUT将blob上传到服务器,然后服务器使用.NET的加密框架(Aes,CryptoStream等)中的相同设置对其进行解密.
我面临的问题是,在Windows上进行本地加密时服务器解密工作正常,但在Mac OS X上进行加密时服务器解密失败 - 服务器抛出"填充无效且无法删除异常".
我从很多方面看了这个:
作为参考框架,我将发布C客户端的加密代码和服务器的C#代码进行解密.服务器端的一些小细节将被省略(它们不会干扰加密代码).
客户:
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void
__setup_aes(EVP_CIPHER_CTX *ctx, const char *key, qvr_bool encrypt)
{
static const char *iv = ""; /* for security reasons, the actual IV is omitted... */
if (encrypt)
EVP_EncryptInit(ctx, EVP_aes_256_cbc(), key, iv);
else
EVP_DecryptInit(ctx, EVP_aes_256_cbc(), key, iv);
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void
__encrypt(void *buf,
size_t buflen,
const char *key,
unsigned char **outbuf, …Run Code Online (Sandbox Code Playgroud) 我开始研究计算复杂性,BigOh表示法等等,我的任务是做整数分解算法并确定其复杂性.我编写了算法并且它正在运行,但我在计算复杂性方面遇到了麻烦.伪代码如下:
DEF fact (INT n)
BEGIN
INT i
FOR (i -> 2 TO i <= n / i STEP 1)
DO
WHILE ((n MOD i) = 0)
DO
PRINT("%int X", i)
n -> n / i
DONE
DONE
IF (n > 1)
THEN
PRINT("%int", n)
END
Run Code Online (Sandbox Code Playgroud)
我想,我试图做的是非常错误的:
f(x)= n-1 + n-1 + 1 + 1 = 2n
所以
f(n)= O(n)
我认为这是错误的,因为分解算法应该在计算上很难,它们甚至不能是多项式的.那么你有什么建议来帮助我?也许我在这个晚上太累了,我搞砸了这一切:(
先感谢您.
我已经构建了一个静态库,可以在我的iPhone应用程序中链接.这个库使用了一些全局变量和函数,就像在C中一样.我的问题是,当使用时,例如:
extern
void do_stuff (const int a)
{
return a*a;
}
extern const int a_variable;
extern const int an_array[DEFINED_VALUE];
Run Code Online (Sandbox Code Playgroud)
当我在代码中的任何地方使用此函数或访问这些变量时,编译器会告诉我
"_do_stuff"引自: - test.o中的[Object testMethod]
"_a_variable"引用自: - test.o中的[Object testMethod]
"_an_array"引用自: - test.o中的[Object testMethod]
未找到符号Collect2:Id返回1退出状态
有没有人曾经遇到过这个问题?我知道我做的事情很愚蠢,我缺少一些关键的Objective-C或C概念,但我真的看不出来.所以我希望有人可以帮助我.提前致谢.