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

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

ただいまの
回答率

90.49%

  • Swift

    7259questions

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

  • iOS

    4003questions

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

  • 公開鍵認証

    26questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 153

yamasa

score 14

実現したいこと

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文字前後

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let keys = generateKeyPair()
        var error: Unmanaged<CFError>?
        if let cfdata = SecKeyCopyExternalRepresentation(keys.publicKey!, &error) {
            let keyData:Data = cfdata as Data
            let dataStr = keyData.base64EncodedString()
            print("str = " + dataStr)
            print("count = " + dataStr.count.description)
        }

    }
    /**
     * 公開鍵、秘密鍵生成
     */
    func generateKeyPair() -> (publicKey: SecKey?, privateKey: SecKey?) {

        // 鍵の形式を指定
        let parameters: [String: Any] = [
            kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
            kSecAttrKeySizeInBits as String: 512
        ]

        // KeyPairを生成する
        var publicKey: SecKey?
        var privateKey: SecKey?
        let osStatus = SecKeyGeneratePair(parameters as CFDictionary,
                                          &publicKey,
                                          &privateKey)

        // 公開鍵と秘密鍵を返却する
        switch osStatus {
        case noErr:
            return (publicKey, privateKey)
        default:
            return (nil, nil)
        }
    }

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

XCode 9.4.1
Swift4.1

以上です。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-2

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/09 09:41

    回答ありがとうございます。

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

    キャンセル

  • 2018/07/09 09:45

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

    キャンセル

  • 2018/07/09 09:58

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

    キャンセル

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    7259questions

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

  • iOS

    4003questions

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

  • 公開鍵認証

    26questions

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