[解決済み] iPhoneでNSStringをAES暗号化する方法
質問
文字列を暗号化し、暗号化されたデータを別の文字列で返すことができるようにするための正しい方向性を誰か教えてください。(1つは暗号化するメッセージで、もう1つはそれを暗号化する「パスコード」です。パスコードが暗号化されたデータで供給された場合に逆転できる方法で、パスコードで暗号化キーを生成しなければならないと思います。このメソッドは、暗号化されたデータから作成された NSString を返す必要があります。
に詳述されているテクニックを試してみました。 この投稿の最初のコメント にあるテクニックを試してみましたが、今のところうまくいきません。アップルの 暗号化演習 は確かに何かを持っていますが、私はそれを理解することができません...。という言及をたくさん見かけました。 CCCrypt への参照をたくさん見ましたが、私が使用したすべてのケースで失敗しました。
暗号化された文字列を復号化することもできなければならないが、それがkCCEncrypt/kCCDecryptと同じくらい単純であることを望む。
どのように解決するのですか?
コードを投稿していないので、あなたが遭遇している問題を正確に知ることは困難です。しかし、リンク先のブログ投稿は、かなりまともに動作しているように見えます...。
CCCrypt()
への各呼び出しに余分なカンマがあり、コンパイル エラーが発生したことを除けば、です。
その投稿に対する後のコメントには
この適応されたコード
があり、これは私のために動作し、もう少し簡単なようです。NSData カテゴリ用の彼らのコードを含めると、次のように書くことができます: (Note: The
printf()
の呼び出しは、さまざまな点でのデータの状態を示すためだけのものです。実際のアプリケーションでは、このような値を表示することは意味がありません)。
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *key = @"my password";
NSString *secret = @"text to encrypt";
NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipher = [plain AES256EncryptWithKey:key];
printf("%s\n", [[cipher description] UTF8String]);
plain = [cipher AES256DecryptWithKey:key];
printf("%s\n", [[plain description] UTF8String]);
printf("%s\n", [[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding] UTF8String]);
[pool drain];
return 0;
}
このコードと、暗号化されたデータが常にNSStringにうまく変換されるとは限らないという事実を考えると、必要な機能をラップする2つのメソッドを順方向と逆方向で書く方が便利かもしれません...。
- (NSData*) encryptString:(NSString*)plaintext withKey:(NSString*)key {
return [[plaintext dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptWithKey:key];
}
- (NSString*) decryptData:(NSData*)ciphertext withKey:(NSString*)key {
return [[[NSString alloc] initWithData:[ciphertext AES256DecryptWithKey:key]
encoding:NSUTF8StringEncoding] autorelease];
}
これは間違いなく Snow Leopard で動作しますし
ボズ
は、CommonCrypto が iPhone の Core OS の一部であることを報告しています。10.4 と 10.5 の両方には
/usr/include/CommonCrypto
の man ページがありますが、10.5 では
CCCryptor.3cc
のマニュアルページがあり、10.4 にはないので、YMMV です。
EDITです。 参照 このフォローアップの質問 をご覧ください。暗号化されたデータのバイトを文字列として表現するためにBase64エンコーディングを使用し、安全で可逆的な変換を行います。
関連
-
[解決済み] AES暗号化モード(CBC ECB CTR OCB CFB)の選択方法は?
-
[解決済み] Java 256ビットAESパスワードベース暗号化機能
-
[解決済み] Mobile Safariで電話番号のリンクを無効にする方法を教えてください。
-
[解決済み】PHPを使った最も簡単な双方向暗号化方法
-
[解決済み] iPhoneでウェブページからアプリがインストールされているかどうかを確認する方法
-
[解決済み] 複数キーによる暗号化・復号化
-
[解決済み] UIViewのサブビューをセンタリングする方法
-
[解決済み] Xcodeは私のiOSデバイスを見ませんが、iTunesは見ます。
-
[解決済み] iPhoneシミュレーターでカメラをテストするには?
-
[解決済み] カメラロールに画像を保存する方法を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] hw.machine」識別子の信頼性を確認する方法は?
-
[解決済み] UITextViewのキーボードをリターンキーで解除するには?
-
[解決済み] Mobile Safariで電話番号のリンクを無効にする方法を教えてください。
-
[解決済み] UILongPressGestureRecognizerが押し下げ時に2回呼び出される
-
[解決済み] UIImage。リサイズ、そしてクロップ
-
[解決済み] xcodeでiOSアプリのアーカイブを生成できない
-
[解決済み] Push Notificationのアラートテキストは何文字まで可能ですか?
-
[解決済み] iPhoneシミュレーター - 低速接続をシミュレートする?
-
[解決済み] iOS: HTTP POST リクエストを実行するには?
-
[解決済み] iPhoneシミュレーターの位置情報