質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2111閲覧

秘密鍵を使った復号について

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/05/15 10:01

編集2017/05/16 02:14

###前提・実現したいこと
UserDefaultから秘密鍵をData型もしくはString型で取得し、
そちらを元に、対となる公開鍵で暗号化されたものを復号することは可能なのでしょうか。

・既にUserDefaultに保存してある情報を利用する。
・一度ファイルに書き込み、「private.pem」にしているのは参考にしているソースがそのような処理を行なっているため。
・別の方法がありましたらそちらを教えていただきたいです。

###該当のソースコード

swift

1class ViewController: UIViewController { 2 3 override func viewDidLoad() { 4 super.viewDidLoad() 5 6 writeToPem() 7 readFromPem() 8 } 9 10 func writeToPem() { 11 /*わざわざファイル出力しているのは元のコードを参考にしているだけなので、 12 他に良い方法があればそちらを教えていただけたらと思います。*/ 13 14 let privObject = UserDefaults.standard.object(forKey: "BBBBB") 15 let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! 16 let privPath = paths + "/private.pem" 17 18 do { 19 let data = CFBridgingRetain(privObject) as! NSData 20 let string = String(data: data as Data, encoding: .utf8) 21 try string!.write(toFile: privPath, atomically: true, encoding: .utf8) 22 } catch let error { 23 print(error) 24 } 25 } 26 27 func readFromPem() { 28 let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! 29 let privPath = "file://" + paths + "/private.pem" 30 let url = URL(string: privPath) 31 32 do { 33 let data = try Data(contentsOf: url!) 34 let string = data.base64EncodedString(options: .lineLength64Characters) 35 36 /*ここでData型やString型で取り出したりはできるので、 37 それらやpemファイルを使った復号ができる方法を知りたい*/ 38 39 } catch let error { 40 print(error) 41 } 42 } 43 44}

###補足情報(言語/FW/ツール等のバージョンなど)
・Xcode8.2.1
・Swift3.0

###追記

swift

1func test() { 2 do { 3 let aes = try AES(key: "passwordpassword", iv: "") 4 cipherText = try aes.encrypt(Array("Hello world".utf8)) 5 string = cipherText?.toHexString() 6 } catch let error { print(error) } 7 8 do { 9 let aes = try AES(key: "passwordpassword", iv: "") 10 let text = try aes.decrypt(cipherText!) 11 print(String(cString: text)) 12 } catch let error { print(error) } 13}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

http://qiita.com/tenten0213/items/4171818515156788b862
上記で紹介されているようなライブラリをご利用するのはいかがでしょうか?

投稿2017/05/16 00:12

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/05/16 01:42

暗号化についてはなんとなく使えそうですが、復号について教えていただけないでしょうか。
退会済みユーザー

退会済みユーザー

2017/05/16 02:04

このライブラリ内での暗号化、復号はできました。 こちらのKeyの部分に既に生成済みの秘密鍵を利用する場合、どのようにすると良いでしょうか。
退会済みユーザー

退会済みユーザー

2017/05/16 02:05

形式としてはこんな形のものになります。 LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUNkd0lCQURBTkJna3Foa2lH OXcwQkFRRUZBQVNDQW1Fd2dnSmRBZ0VBQW9HQkFOa3pqOW53T1phbnlxM3gKMFkr (省略) b2VCVjNUTlAKK1RERmZOQ1R4Z3VrMXZZPQotLS0tLUVORCBQUklWQVRFIEtFWS0t LS0tCg==
退会済みユーザー

退会済みユーザー

2017/05/16 02:14

やり方があっているのかわかりませんが、一応基本の暗号化と復号の処理を組んでみたものを載せておきます。
退会済みユーザー

退会済みユーザー

2017/05/16 02:54

そもそもこれはAESのみの対応のような気がします。 情報が不足で申し訳ありませんが、形式はRSAです。
t_obara

2017/05/16 03:30

上記のライブラリにこだわる必要はなく、RSAに対応したライブラリを探して利用すれば良いだけかと思いますよ。
退会済みユーザー

退会済みユーザー

2017/05/16 04:08

その場合、これは回答になっていないと思うのですが。。。
fuzzball

2017/05/16 04:19 編集

@kage_nui__さん 一例としてCryptoSwiftを取り上げていますが、後出しで「RSA」が出てきたので、対応したライブラリを探せというこということでしょう? 回答としては、一貫して「ライブラリを使いましょう」ということだと思いますが。
退会済みユーザー

退会済みユーザー

2017/05/16 04:42

「結局は自分で調べてやりましょう」ということになるのでは?とも思ってしまうのですが。 「このライブラリのこのメソッドで出来そうですよ。」くらいの情報は欲しかったなと。 一応SwiftyRSAが代替のライブラリとして使えそうです。
fuzzball

2017/05/16 04:51

>>くらいの情報は欲しかったなと 何様w
退会済みユーザー

退会済みユーザー

2017/05/16 04:59

こうあって欲しかったなという希望を言葉にすることさえ、バカにされるようなサイトなのですね。 困っている質問者を見つけてはこうやって蔑んで何が楽しいのか。 非常に不愉快です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問