2

以前、メソッドを定義することにより、文字列キー ファイルを使用して一部のデータを暗号化するためにトリプル DES 暗号化を行いました。

+ (NSData *)tripleDESEncryptWithKey:(NSString *)key dataToEncrypt:(NSData*)convertedData   {}. 

現在、同様に AES 256 暗号化を行っています。しかし今回は、文字列をキーとして使用することはできません。を使用して、リソース内のファイルから NSData を取得する必要があります

NSData *keyData = [NSData dataWithContentsOfFile:keyPath];

このキーをパラメーターとして渡す必要があるため、次のようにして文字列に変換しようとしました

NSString *key = [[NSString alloc] initWithData:keyData encoding:NSUTF8StringEncoding];

しかし、NULL を返しました。では、AES 256 暗号化にデータ キーを使用する方法は?

編集:データファイルは文字列のBase64エンコーディングで作成されているため、UTF8エンコーディングを使用しないでください。さて問題は、 keyData から Base64 を使用して文字列キーを取得する方法です。

4

2 に答える 2

0

keyvariable が返された場合NULL。こんな感じで使ってみてください。

NSString* key = [NSString stringWithUTF8String:[keyData bytes]];

KennyTMの回答を参照してください

更新 1:変換せずにファイルから直接文字列を読み取ることもできますNSData

NSFileHandle:

NSString * path = @"your key file path";
NSFileHandle * fileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
NSData * buffer = nil;
while ((buffer = [fileHandle readDataOfLength:1024])) {
    //do something with buffer
}

または NSString を使用します

NSString * key = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

Dave DeLongの回答を参照してください

注:変数を確認してください。絶対keyPathパスまたは相対パスの形式で正しいですか?

更新 2: Matt Gallagher NSData+Base64 Class&Headerを使用して Base64 エンコーディングを処理することもできます(彼のブログも参照してください)

base64 エンコードの場合

NSString * key = [[path dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];

それがあなたを助けることを願っています!

于 2012-05-28T18:11:29.217 に答える
0

ファイルを読む:

NSData* myData = [NSData dataWithContentsOfFile:myFileWithPath];

次に、この投稿の実装の 1 つを使用します。

Mac と iPhone の Base64 エンコード オプション

Base64 変換を行います。

注: 単純に復号化キーをファイルに貼り付けることはお勧めできません。鍵は、ユーザー自身の鍵で暗号化して安全に保管するのが最適です。

于 2012-05-30T14:48:33.130 に答える