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

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

新規登録して質問してみよう
ただいま回答率
85.50%
公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

iOS

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

Swift

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

Q&A

解決済

2回答

3025閲覧

SwiftでPublicKeyの文字列を表示したい。

yamasa

総合スコア23

公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

iOS

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

Swift

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

0グッド

0クリップ

投稿2018/07/08 13:00

実現したいこと

Swiftで下記のページにある
Online RSA Key Generator
で生成されている 512bit:Public Keyの
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
で囲まれた文字列を出力したい。

試したこと

SwiftとOnline RSA Key Generatorとの違い
・最初の2文字は固定で、Swift上だと"ME"になっている。Online RSA Key Generatorでは"MF"
・文字数がSwift:100文字固定ですが、Online RSA Key Generator:128文字前後

Swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 // Do any additional setup after loading the view, typically from a nib. 4 5 let keys = generateKeyPair() 6 var error: Unmanaged<CFError>? 7 if let cfdata = SecKeyCopyExternalRepresentation(keys.publicKey!, &error) { 8 let keyData:Data = cfdata as Data 9 let dataStr = keyData.base64EncodedString() 10 print("str = " + dataStr) 11 print("count = " + dataStr.count.description) 12 } 13 14 } 15 /** 16 * 公開鍵、秘密鍵生成 17 */ 18 func generateKeyPair() -> (publicKey: SecKey?, privateKey: SecKey?) { 19 20 // 鍵の形式を指定 21 let parameters: [String: Any] = [ 22 kSecAttrKeyType as String: kSecAttrKeyTypeRSA, 23 kSecAttrKeySizeInBits as String: 512 24 ] 25 26 // KeyPairを生成する 27 var publicKey: SecKey? 28 var privateKey: SecKey? 29 let osStatus = SecKeyGeneratePair(parameters as CFDictionary, 30 &publicKey, 31 &privateKey) 32 33 // 公開鍵と秘密鍵を返却する 34 switch osStatus { 35 case noErr: 36 return (publicKey, privateKey) 37 default: 38 return (nil, nil) 39 } 40 }

補足情報(FW/ツールのバージョンなど)

XCode 9.4.1
Swift4.1

以上です。

どんな些細な情報でも回答頂けたらと思います。
よろしくお願い致します。

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

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

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

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

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

guest

回答2

0

自己解決

ライブラリHeimdallを利用することで表示する事が出来ました。

ちなみに一度、512で実行した後に1024で作成しても
Keychainに保存されている為、512の結果が表示され続けます。
destroy()で一度削除する必要があります。

Swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 // Do any additional setup after loading the view, typically from a nib. 4 let heimdall = Heimdall(publicTag: "publicKey", privateTag: "privateKey", keySize: 512) 5 let publicKeyData = heimdall?.publicKeyDataX509() 6 let base64Str = publicKeyData!.base64EncodedString() 7 print(base64Str) 8 } 9

投稿2018/07/14 04:57

yamasa

総合スコア23

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

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

0

最初と最後の行を除いて、ふつーにprintするのでいいんじゃないでしょうか

投稿2018/07/08 13:59

y_waiwai

総合スコア87719

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

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

yamasa

2018/07/09 00:41

回答ありがとうございます。 最初と最後の行というのがどこを指しているのかわからないのですが、 cfdataをprintしても期待する結果は得られませんでした。
y_waiwai

2018/07/09 00:45

どういう結果が得られましたか?
yamasa

2018/07/09 00:58

print(cfdata)の結果は下記です。 <30480241 0092b096 aff35988 e9bb01c6 2f65c7b3 8d08eb6c dd34b0d8 d62dd954 d3fd5155 ec87b376 f2d353f6 71792202 cbd03e9a bef4ecdc 8bea39a0 c0b8b624 0b95b556 93020301 0001>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問