私は機密情報を含むSQLiteデータベースを持っています。だから私の懸念は、iPhoneに保存して、安全でハッカーが手に入れることができないようにする方法です。 ipadで提供されているハードウェアの暗号化について調べましたが、その使い方を理解できませんでした。iphone ..にSQLiteデータベースを安全に保存する方法は?
答えて
あなたの問題を解決するためのさまざまな方法があります。
md5 + salt暗号化でCoreDataに格納された値を暗号化します。ユーザーデバイスのUUIDと、データを保存するための追加の「塩」に基づいて、特殊キーを生成することができます。注意すべき点は、Appleは今後、デバイスのパーソナル化値を下げることになるということです。しかし、反対側では、ユーザーの認証によって特殊キーを受け取って、このキーを後要求から受け取ることがあります。暗号化のために、組み込みフレームワーク:
#import <CommonCrypto/CommonDigest.h>
を使用することができます。あなたはウェブ上で見つけることができる多くの例があります。ドキュメントフォルダ内のsqliteファイル全体を暗号化します。これは私にとってかなり難しいことです。以前はこのアプローチに直面していませんでした。
EDIT: これは、MD5データを暗号化し受信するために使用できるコードサンプルです: これは.hファイル
#import <Foundation/Foundation.h>
@interface NSString (MyExtensions)
- (NSString *) md5;
@end
@interface NSData (MyExtensions)
- (NSString *)md5;
@end
あり、これは.Mファイルです:
#import "MyExtensions.h" //here should be your .h file name
#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access
@implementation NSString (MyExtensions)
- (NSString *) md5
{
const char *cStr = [self UTF8String];
unsigned char result[16];
CC_MD5(cStr, strlen(cStr), result); // This is the md5 call
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}
@end
@implementation NSData (MyExtensions)
- (NSString *)md5
{
unsigned char result[16];
CC_MD5(self.bytes, self.length, result); // This is the md5 call
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}
@end
このファイルをコードの任意の場所に含めると、次の関数を呼び出すことができます。
NSString *myStringToEncrypt = @"Confidential information";
NSString *myMD5 = [myStringToEncrypt md5];
btw:あなたが知っておくべきことは、MD5関数はデータの合計を制御するだけのハッシュ関数です。 にを暗号化したい場合は、AES256暗号化方法をご覧ください。 CommonCryptoもそれを提供します。アプローチはあなたの目標に依存します。
データベースのパスワードで保護されたzipファイルを作成できると思います。必要なときに解凍することができます。
私が聞いた限りでは、パスワードで保護されたZIPファイルは、私の主な関心事は、デバイスの盗難です。デバイスが盗まれて、そのデータベースにアクセスできる方法があるかどうかを確認してください。そのため、ハードウェアアクセラレーションによるAES暗号化を検討しています。デバイスが盗まれる。 –
保護するために良いパスワードを選択した場合、クラックするのは難しいでしょう。もちろん、AES暗号化は非常に優れています。しかし、データベース全体を暗号化/復号化するたびに、多くのCPU時間を消費します。私はそれが非常に効率的ではないと感じています。 – Vignesh
私は毎回データベース全体を暗号化/解読することを考えていませんでしたが、それは非常に効率的で、私が考えていたのはデータベースをロックするデータベースのロックのようなものでした... hburdeによって提案されたオプション...しかし、とにかくありがとう。 –
http://sqlcipher.net/(SQLLite with AES Encryption)を使用することができますが、これには深刻な影響があります(エクスポートの制限があり、CoreDataと統合されません)。
- 1. MySQLデータベースにPHPオブジェクトを保存する安全な方法は?
- 2. データベースにユーザー入力コードを安全に保存する方法
- 3. textField.textを安全にアンラップしてプロパティに安全に保存する方法
- 4. ファイルをアンドロイドでディスクに安全に保存する方法は?
- 5. SQL ServerデータベースにAPI資格情報を安全に保存する方法
- 6. ユーザー名/パスワード(ローカル)を安全に保存する方法は?
- 7. ASP.NETメンバーシップでサービスパスワードを安全に保存する方法は?
- 8. 安全な文字列をAndroidに保存する方法は?
- 9. PHP:情報をクッキーに保存する安全な方法は?
- 10. herokuにデータベース接続文字列を保存する安全な方法
- 11. 安全にanglejsにパスワードを保存する方法
- 12. Oauthを安全にアンドロイドに保存する方法
- 13. Webアプリケーションのメールサーバーにパスワードを安全に保存する方法
- 14. サーバーにファイルを安全に保存する方法
- 15. クライアントログイン - クレデンシャルをクライアント側に安全に保存する方法
- 16. ファイルをsqliteに保存する方法
- 17. PendingIntentをsqliteデータベースに保存する方法は?
- 18. イメージをsqliteデータベースに保存して表示する方法は?
- 19. バルクレコードをAndroidのsqliteデータベースに保存する方法は?
- 20. 安全にAndroid KeyStoreのパスワードを保存する方法
- 21. HeidiSQLのパスワードを安全に保存する方法
- 22. アクセストークンを安全に保存する
- 23. 安全にキーストリング値を保存する
- 24. 安全にAPIを保存する
- 25. データをSQLiteデータベースに保存
- 26. パスワードをデータベースに保存する前に安全にハッシュする方法はありますか?
- 27. iOSで暗号化キーを保存する安全な方法
- 28. JSiteオブジェクトをSQLiteデータベースに保存する方法
- 29. SQLiteデータベースのBLOBフィールドにビットマップを保存する方法
- 30. android sqliteデータベースにファイルを保存する方法
読み取り時に暗号化して復号化することができます。あなたのアプリケーションがオープンソースではなく、他人に暗号化の方法を伝える必要がない場合、使用するアルゴリズムは簡単なxorでもenougthになります。 – jcubic