Cryptoのラッパー。CryptoをSwiftらしく使えるようにしてくれている。IDZSwiftCommonCryptoの3つでした。Cryptoを使ってみることにしました。CryptoのCCCrypt()メソッドをラップします。それに利用したいアルゴリズム(今回、AES)を渡して暗号化・復号します。今回作成するクラスCommonCryptoWrapperのgenerateRandomBytes()を呼び出して、ランダムな文字列を作ります。iv)として使います。このgenerateRandomBytes()メソッドについては後で説明します。AESのブロックサイズは128ビットなので、ivのサイズとしてkCCBlockSizeAES128を指定します。AESはSPN構造のブロック暗号である。ブロック長は128ビットであり、鍵長には128ビット・192ビット・256ビットの3種類が選択できる(鍵長が大きいほうが暗号強度が高い)。同様にランダムな文字列を作ります。Key)として使います。256bitから選べます。今回、256ビットにするので、kCCKeySizeAES256を指定します。今回作成するクラスAES_CBC_PKCS7Padding.encrypt()を呼び出し暗号化します。worldの文字列)を渡します。暗号化されているので、元のdataとencryptedDataは同じになりません。同様に、decrypt()を呼び出し復号します。復号したいencryptedDataを渡します。元のdataとdecryptDataは等しくなります。今回作成するCommonCryptoWrapperクラスのcrypt()メソッドを呼び出します。暗号化するので、kCCEncryptを渡します。AESを使うので、kCCAlgorithmAESを渡します。暗号利用モードは、optionsにkCCOptionECBModeを指定しない限り、デフォルトでCBCモードになります。CBCモードは、パディングが必要な暗号利用モードです。そのため、optionsにkCCOptionPKCS7Paddingを指定して、パディングを有効にします。dataを指定します。(1)とほぼ同じですが、こちらはoperationにkCCDecryptを渡します。key)を、バイト配列(UInt8の配列)にしています。dataInについても同じようにしています。CryptoのCCCrypt()メソッドに渡します。&は値を渡すのではなく参照を渡すということを表しています。dataInについても同じようにしています。CCCrypt()の定義は以下の通りです。&をつけることで、&keyBytesはkeyBytes(UInt8配列)を参照するUnsafeRawPointerとして扱われます。CCCryptorStatus&をつけることで、参照を渡すことになるということ、pointerを渡すことになることについては、以下のページが参考になります。dataOutBytesに入っているデータのうち、CCCrypt()処理を施した部分をdataOutMovedで切り取って、返します。keyに使う乱数を返します。CCRandomGenerateBytes()は、以下の通り、暗号論的にセキュアな乱数が返るようになっています。etc.CCRandomGenerateBytes()のドキュメント。convertCCCryptorStatusToName()では、Int32型のstatusを、名前に変えています。エラーが発生した時に、ログやCrashlytics等に表示される時にInt32型だとパッとみてわからないです。わかりやすくするため名前に変換しています。必須の処理ではないです。}}補足この記事は以下のページを参考にしています。CryptoでAES-CBCを使って暗号化しています。Encryptionをしています。ユーザーが入力したパスワードをsaltと組み合わせて共通鍵を作ります。(3)とこの記事では、単純に乱数を生成し共通鍵として使っています。FrameworkのSecRandomCopyBytes()を使っています。CryptoのCCRandomGenerateBytes()を使っています。(1)と(2)がこのようにしている理由は不明です。Cryptoの乱数生成メソッドを使うのが自然だと思います。(1)~(3)では、CCCrypt()を呼び出すのにUnsafePointerを多用しています。この記事では多少メモリを使いますがわかりやすさのためPointerを使わない方法で実装してみました。今回使ったAESやCBCなどの暗号利用モードについて、詳しく知りたい方は、以下の資料がおすすめです。一連の暗号技術についてわかりやすく説明してくれます。新人時代の自分にすすめたい本です。今もときどき見返す本です。最後にこの記事ではiOS13未満もサポートするiOSアプリで、共通鍵暗号を使う方法を紹介しました。古めのアプリのメンテナンス等でこの記事が役に立つとうれしいです。CupertinoAppでドロワーを表示するMaterialAppでは、Scaffoldのdrawerを使って簡単にドロワーを表示することができます。CupertinoAppのCupertinoPageScaffold等にはdrawerは用意されていません。この記事ではCupertinoAppでドロワーを表示する方法について説明します。モバイルアプリ開発Flutterで画面をドラッグ・スワイプで開くFlutterで、左から右にドラッグ・スワイプしたらインタラクティブに別の画面を開く方法について説明します。ドロワーメニューなどを実装する際に役に立つと思います。モバイルアプリ開発Flutterで要素が円軌道に並ぶListViewを実装するFlutterで、ListViewの要素を丸く表示する(円形の軌道上に並べる)方法を残しておきます。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。Comments表示できるコメントはありません。Comments表示できるコメントはありません。タイトルとURLをコピーしました。