0

iPhone Simulator 用の OpenSSL ライブラリの作成に成功しました。すべてのヘッダーとライブラリを正常にインポートしました。ただし、プロジェクトのビルドに問題があり、XCode は構造体 X509_ALGOR の定義が不完全であることを通知します。コードは次のとおりです。

- (NSData *)encodePBEWithMD5AndDESData:(NSData *)inData password:(NSString *)password direction:(int)direction
{   
// Change salt and number of iterations for your project !!!

static const char gSalt[] =
{
    (unsigned char)0xaa, (unsigned char)0xd1, (unsigned char)0x3c, (unsigned char)0x31,
    (unsigned char)0x53, (unsigned char)0xa2, (unsigned char)0xee, (unsigned char)0x05
};

unsigned char *salt = (unsigned char *)gSalt;
int saltLen = strlen(gSalt);
int iterations = 15;

EVP_CIPHER_CTX cipherCtx;


unsigned char *mResults;         // allocated storage of results
int mResultsLen = 0;

const char *cPassword = [password UTF8String];

unsigned char *mData = (unsigned char *)[inData bytes];
int mDataLen = [inData length];    

SSLeay_add_all_algorithms();
X509_ALGOR *algorithm = PKCS5_pbe_set(NID_pbeWithMD5AndDES_CBC,
                                      iterations, salt, saltLen);


memset(&cipherCtx, 0, sizeof(cipherCtx));

if (algorithm != NULL)
{
    EVP_CIPHER_CTX_init(&(cipherCtx));

    **if (EVP_PBE_CipherInit(algorithm->algorithm, cPassword, strlen(cPassword),
                           algorithm->parameter, &(cipherCtx), direction))**
    {

        EVP_CIPHER_CTX_set_padding(&cipherCtx, 1);

        int blockSize = EVP_CIPHER_CTX_block_size(&cipherCtx);
        int allocLen = mDataLen + blockSize + 1; // plus 1 for null terminator on decrypt
        mResults = (unsigned char *)OPENSSL_malloc(allocLen);


        unsigned char *in_bytes = mData;
        int inLen = mDataLen;
        unsigned char *out_bytes = mResults;
        int outLen = 0;

「アルゴリズム」である構造体 X509_ALGOR へのポインターが不完全に定義されていることが判明しました。私はこれについて何の手がかりも持っていません。誰でも私を助けてもらえますか?

if (EVP_PBE_CipherInit(algorithm->algorithm, cPassword, strlen(cPassword),
                           algorithm->parameter, &(cipherCtx), direction))
4

1 に答える 1

0

自分の質問に対する回答を投稿するのが適切かどうかはわかりません。しかし、誰かが同じ問題を抱えている場合、私はこれを行っています、彼/彼女はこれからいくつかの助けを得るかもしれません。

上記のコードの問題は、リンカーフラグでした。[ビルド設定]の[その他のリンカーフラグ]で[-ObjC-load_all]を設定すると、問題は解決しました。

よろしく。

于 2012-07-14T05:11:04.487 に答える