小编Ric*_*ira的帖子

使用OpenSSL在平台之间进行不同的加密

我正在研究C中的一个跨平台(Windows和Mac OS X)代码,它需要使用带有CBC的AES-256和128位的块大小来加密/解密blob.在各种库和API中,我选择了OpenSSL.

然后,这段代码将使用多部分形式的PUT将blob上传到服务器,然后服务器使用.NET的加密框架(Aes,CryptoStream等)中的相同设置对其进行解密.

我面临的问题是,在Windows上进行本地加密时服务器解密工作正常,但在Mac OS X上进行加密时服务器解密失败 - 服务器抛出"填充无效且无法删除异常".

我从很多方面看了这个:

  1. 我验证了传输是正确的 - 在服务器的解密方法上接收的字节数组与从Mac OS X和Windows发送的字节数组完全相同
  2. 对于相同的密钥,加密的blob的实际内容在Windows和Mac OS X之间是不同的.我使用硬编码密钥对此进行了测试,并在Windows和Mac OS X上针对相同的blob运行此修补程序
  3. 我确定填充是正确的,因为它由OpenSSL处理,因为相同的代码适用于Windows.即便如此,我尝试实现填充方案,因为它是微软的.NET参考源,但仍然没有
  4. 我确认对于Windows和Mac OS X,IV是相同的(我想也许有一些特殊字符出现问题,例如出现在IV中的ETB,但是没有)
  5. 我已经尝试过LibreSSL和mbedtls,没有任何积极的结果.在mbedtls中我还必须实现填充,因为据我所知,填充是API用户的责任
  6. 我已经在这个问题上待了差不多两个星期了,我开始把我的(稀少的)头发拉出来了

作为参考框架,我将发布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)

c encryption macos openssl aes

15
推荐指数
1
解决办法
899
查看次数

确定整数分解算法的复杂性

我开始研究计算复杂性,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)

我认为这是错误的,因为分解算法应该在计算上很难,它们甚至不能是多项式的.那么你有什么建议来帮助我?也许我在这个晚上太累了,我搞砸了这一切:(

先感谢您.

algorithm complexity-theory big-o factorization

12
推荐指数
1
解决办法
7020
查看次数

静态库中的extern变量,使用Objective-C

我已经构建了一个静态库,可以在我的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概念,但我真的看不出来.所以我希望有人可以帮助我.提前致谢.

c global-variables objective-c static-libraries extern

5
推荐指数
1
解决办法
3209
查看次数