8

私は現在、リクエストのxml内に証明書ファイルを送信することを含む小さなsoapクライアントを機能させようとしています。

ファイルをNSDataオブジェクトに取り込むのに問題はありませんが、Base64文字列に変換する必要があります。環境はMacOSX、Xcode4.3です。

私はそれを扱っている古い投稿をたくさん見つけました-しかし私が見つけた最高のものは、OpenSSLライブラリを利用し、非推奨のメソッドのロードを含むコードでした。

だから、私の質問は次のとおりです:OpenSSLライブラリを使用するよりも良い方法はありますか?はいの場合、URLまたは最近のコードスクラップがありますか?

いいえの場合、推奨できるBase64を扱うプロジェクトがいくつかあると思います。結局のところ、Base64はそれほど珍しいことではありません。

ご協力いただきありがとうございます!

4

4 に答える 4

11

CommonCryptoで行われるbase64エンコーディングは次のとおりです。

それは非常に簡単なコードであり、カテゴリに入れるのは難しくありません

これをプロジェクトに追加する場合は、Security.frameworkも追加する必要があります

#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>

static NSData *base64helper(NSData *input, SecTransformRef transform)
{
    NSData *output = nil;

    if (!transform)
        return nil;

    if (SecTransformSetAttribute(transform, kSecTransformInputAttributeName, input, NULL))
        output = (NSData *)SecTransformExecute(transform, NULL);

    CFRelease(transform);

    return [output autorelease];
}

NSString *base64enc(NSData *input)
{
    SecTransformRef transform = SecEncodeTransformCreate(kSecBase64Encoding, NULL);

    return [[[NSString alloc] initWithData:base64helper(input, transform) encoding:NSASCIIStringEncoding] autorelease];
}

NSData *base64dec(NSString *input)
{
    SecTransformRef transform = SecDecodeTransformCreate(kSecBase64Encoding, NULL);

    return base64helper([input dataUsingEncoding:NSASCIIStringEncoding], transform);
}
于 2013-01-25T13:31:01.247 に答える
5

iOS7またはOSX10.9 SDKを使用している場合は、NSDataの新しいbase64機能を使用できます。

古いSDKを使用している場合は、この宣言を追加するだけで、NSDatabase64のエンコードとデコードを取得できます。これは、iOS4以降およびOSX10.7以降で機能します。

#ifndef __IPHONE_7_0
@interface NSData (NSDeprecated)
- (id)initWithBase64Encoding:(NSString *)base64String NS_DEPRECATED(10_6, 10_9, 4_0, 7_0);
- (NSString *)base64Encoding NS_DEPRECATED(10_6, 10_9, 4_0, 7_0);
@end
#endif
于 2013-09-12T18:59:18.807 に答える
3

これが私が書いた単純なNSDataBase64カテゴリです。これは、内部でplistのシリアル化/逆シリアル化メカニズムを使用します。また、レーダー#9896929を複製するとよいでしょう。

于 2012-07-08T21:35:51.897 に答える
2

これはOSXで機能し、10.6から10.8までのSDKでこれを使用しても問題ありません。10.9の場合、メソッドは少し変更されています(ただし、執筆時点では機能します)が、すべて文書化されています。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instm/NSData/base64Encoding

+ (NSString *) base64StringFromFileAtPath: (NSString*) filePath {
    NSData * dataFromFile = [NSData dataWithContentsOfFile:filePath];
    return [dataFromFile base64Encoding];
}


+ (NSData*) dataFrom64String : (NSString*) stringEncodedWithBase64
{
    NSData *dataFromBase64 = [[NSData alloc] initWithBase64Encoding:stringEncodedWithBase64];
    return dataFromBase64;
}
于 2014-04-23T08:51:43.723 に答える