2009-09-13 9 views
15

私は入力されたNSStringをCCCrypt(AES256)とプレーンテキストキーを使って暗号化するiPhoneアプリを持っています。文字列とキーは、NSDataオブジェクトを返す暗号化メソッドに渡されます。私はNSStringのにそれを変換しようとすると、「< 0b368353 a707e7de 3eee5992 ee69827e e3603dc2 b0dbbc0b 861ca87d f39ce72a>」しかし、私は(」を取得:「データ」は暗号化された文字列のデータは以下のようにNSStringのを与えている[データ記述]を要求obj-cのNSStringに暗号化されたNSData?

ヌル)"。

NSStringをユーザーに返す必要があります。これを使用して、同じプレーンテキストキーを使用して元の文字列に復号化することができます。 NSDataオブジェクトの 'description'プロパティが文字列を返すことができる場合、NSDataオブジェクトから「(null)」を取得せずにNSStringを生成する方法はありますか?

更新:Quinnに感謝します.Muddled文字列を生成するためにBase64エンコーディングを使用することをお勧めします。私が理解しているところから、Base64エンコーディングは単純に文字を入れ替えるのではなく、文字のやりとりは位置に依存するので、問題ありません。

私は、「パスフレーズ」でメッセージを暗号化したいと思っています。混乱した文字列をデコードする必要があるときに、同じパスフレーズを入力する必要があります。誰でもこれを実装する方法を提案できますか?

+0

私はこれを解決するために私の答えを更新しました。あなたは正しいです、Base64は置換アルゴリズムではありません - 基本的に3バイトを4バイトに拡張するので、エンコードされたデータはエンコードされていないデータの1.37倍です。基本的には、3つの8ビットチャンクを取り、それを4つの6ビットチャンクに再分割し、それぞれを8ビットチャンクとして再解釈します。これは簡単にASCIIで表現できます。ウィキペディアには詳細があります。 –

答えて

32

最初にオフ、を使用しないでください。このような目的でNSStringを作成するには-[NSData description]を使用してください。 my previous answerがあなたを惑わしてしまった場合は、NSDataを暗号化して解読できることを示す説明を印刷していました。)代わりにNSStringの-dataUsingEncoding:-initWithData:encoding:メソッドを使用してNSDataとNSStringを変換します。これらの場合でも、AESで暗号化されたデータはそのままでは文字列に変換されないことに注意してください。バイトシーケンスのほうがうまく再生できないため、文字列を作成する前にデータをエンコードすることをお勧めします。

Base64データは常にASCII文字列として表すことができるので、Base64 encoding NSDataを試してみることをお勧めします。 (あなたがそれを行う際にもちろん、あなたは解読する前にBase64でデコードする必要があります。)

ここ


編集:私はあなたがのNSStringオブジェクトのAES暗号化にyour previous questionに私の答えと組み合わせるだろうと仮定した。 Base64のようにデータをエンコードしても、データそのものに制限はありません。それは確かにAESで暗号化されたデータそのものです。

  • は、NSStringのが暗号化されるように提供

    • 暗号化、および暗号化に使用するパスフレーズ:ここでは、単なる文字列の入力と出力をしたい場合はどうするかです。
    • 文字列をNSDataに変換し、その上でAES暗号化を実行します(前述の質問を参照)。
    • NSDataをBase64エンコードし、エンコードされた出力を作成して返し、NSStringします。復号
    • は暗号化され、エンコードされた文字列、および復号化するために使用するパスフレーズを提供します。
    • 最初の文字列からNSDataを作成し、次にデータをBase64でデコードします。
    • データに対してAES復号化を実行し、NSStringを作成して返します。

それは本当に一緒に二つの部分をチェーンし、途中うちに逆にそれらを実行するだけです。私の前の答えから、encryptString:withKey:を変更して最後のステップを実行して文字列を返し、decryptString:withKey:になるようにdecryptData:withKey:を変更し、2つの文字列を受け入れることができます。それはかなり簡単です。

+3

+1とNSDataAdditionsへのリンクありがとう、非常に便利です! –

+0

@FreeAsInBeerコミュニティWikiを編集するときに、他の人の回答をマークしないでください。それはそれが何であるかではありません。 –

+0

@QuinnTaylor [よくある質問]には、コミュニティWikiのチェックボックスにアクセスできるのはあなただけだと記載されています。私の編集が誤ってコミュニティWikiモードに入ったかもしれませんが、それはまったく意図しないものでした。他の人ができないことをしていると非難しないでください。 [参考](http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts/11741#11741) – FreeAsInBeer

2

NSDataとNSStringのカテゴリの完全なバンドルをまとめて、文字列にAES256暗号化を提供しました。

詳細については、元の質問のmy answerをご覧ください。

関連する問題