>source

SecKey 를 만들 수 없습니다  개인 키 아래의 개체에서 여기에 많은 답변을 시도했지만 아무것도 도움이되지 않습니다.

내 신속한 코드는 다음과 같습니다.

   var error: Unmanaged<CFError>?
    guard let keyData = Data(base64Encoded: key) else {
        return nil
    }
    var keyAttributes: CFDictionary {
        return [kSecAttrKeyType: kSecAttrKeyTypeRSA,
                kSecAttrKeyClass: kSecAttrKeyClassPrivate,
                kSecAttrKeySizeInBits: keySize] as CFDictionary
    }
    guard let secKey = SecKeyCreateWithData(keyData as CFData, keyAttributes, &error) else {
        print(error.debugDescription) //Error Domain Code=-50 "RSA private key creation from data failed swift-iOS
        return nil
    }

예상 결과는 secKey 입니다.  유효한 값이어야하고 guard 이상이어야합니다.  실패해서는 안됩니다.

개인 키는 다음과 같습니다 :

-----BEGIN PRIVATE KEY-----

MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM0xQqfjksEoY9ID QougUBgmmYKK3wbwR7SCGUwXWWjGoKbkAHpEUDxMtvcMSH7kgNjQRQ+98rN5rA8M kitegt6ydMxQmacNnXoL9/lKP9BKYY7y5M6EYWULg8Lk9UKVx0CKmgdSPhEVC9Ob pZc1bt7xfBahK2YPYQu9XwDUS7mLAgMBAAECgYAmI7ldhnXRNGY1c4irdk1c59PR yWlCG2hgm2wDUjW6vWzACJI0J714L9Q0YFKbT3LJmhC0J9zUUlHSbEZBDGyrjc/d FMI7DjFSkmNbbZ2zOWm4n2J6URXOD/ev9MXdBqhpI0aC3CEsbkZQ6TvRIlcaNN3z 9cuZ2l3IhaJ2f4pwaQJBANjY2oT2dUAOwcba2FSucLkaMGxAATvLLU8lKk8bgHF2 JYNlCxXoHnuxQiK9QT6CenCWfhQ8ztvF0EcSRqOkKrkCQQDyPbPvECHVMv4BYeUu aXqR68BkjfbfMQ5/a11SkshnblpYB4P2Dy1BGshKRPmLso6ZH9Vag7v9Z5QeG8zs 3tRjAkEAlifLYQjcdggB7LX72N+WFMbqwvqrIAF4FXbxzieIEIk0PsEIJRo/iX1c A3wzopptOGstUMwunYZjy+L+4S+7mQJBAMwOGhJZfoZ/i+RSOKJeC/f7pXeO9tSQ GGxRXq1+I/6swMHCovCVXEOpcerOK3/4C5MFc83phmQx6l1qgbdPBY0CQDCzZlFG 3zfIcyrAhX6E8iA6v2x51/Sj19gJzJ8n5PvkW8dABxxWVCg+YZcJf18Amkj2ktPu 6k0k3m/GUbvbVss=

-----END PRIVATE KEY-----

참고 : 해당 secKey 로 공개 키 변환  완벽하게 작동하고 있습니다 (문제는 해독하는 동안 유일한 개인 키에 있습니다). \r\n 를 제거하려고했습니다.  위 키에서.


  • 답변 # 1

    많이 검색 한 후 SwiftyRSA 라이브러리를 사용하여이를 관리 할 수 ​​있습니다.

       let privateKeySwifty = try PrivateKey(pemEncoded: privateKey)
        let secPrivateKey = try PrivateKey(reference: privateKeySwifty.reference)
    
    

    더 깊이 파고 들어 보니, keyData 의 헤더를 스트라이프해야 할 필요가 있음을 알 수 있습니다.  (ASN.1 파싱), 왜 이것이 필요한지, 어떻게 작동하는지 잘 모르겠습니다.

  • 이전 web services - PHP curl을 사용하여 웹 서비스 호출
  • 다음 r - DGEList에서 카운트 매트릭스를 조작하는 방법은 무엇입니까?