アプリケーションの要件に従って、サイズ 512 の RSA 公開鍵を作成する必要があります。同じために以下のコードを使用しています。
func generatePublicKey() -> String
{
var strKey : String = ""
let publicKeyAttr: [NSObject: NSObject] = [kSecAttrIsPermanent:true as NSObject, kSecAttrApplicationTag:"com.nichetech.DEMO.public".data(using: String.Encoding.utf8)! as NSObject]
let privateKeyAttr: [NSObject: NSObject] = [kSecAttrIsPermanent:true as NSObject, kSecAttrApplicationTag:"com.nichetech.DEMO.private".data(using: String.Encoding.utf8)! as NSObject]
var keyPairAttr = [NSObject: NSObject]()
keyPairAttr[kSecAttrKeyType] = kSecAttrKeyTypeRSA
keyPairAttr[kSecAttrKeySizeInBits] = 512 as NSObject
keyPairAttr[kSecPublicKeyAttrs] = publicKeyAttr as NSObject
keyPairAttr[kSecPrivateKeyAttrs] = privateKeyAttr as NSObject
statusCode = SecKeyGeneratePair(keyPairAttr as CFDictionary, &publicKey, &privateKey)
var error:Unmanaged<CFError>?
if let cfdata = SecKeyCopyExternalRepresentation(self.publicKey!, &error) {
let data:Data = cfdata as Data
//let b64Key = (data).base64EncodedString()
let b64Key = (data).base64EncodedString(options:NSData.Base64EncodingOptions.lineLength76Characters)
let strPublicKey = appendPrefixSuffixTo(b64Key, prefix: "-----BEGIN PUBLIC KEY-----\n", suffix: "\n-----END PUBLIC KEY-----")
strKey = strPublicKey
}
return strKey
}
Android でも .net でも同じ機能を利用できます。他のすべてのプラットフォームで文字列の長さを数えると、スペースありで 181 文字、スペースなしで 174 文字です。
しかし、iOS では、スペースありで 153 文字、スペースなしで 146 文字しか取得できません。
コードに問題はありますか???? または、iOS の RSA の長さが異なりますか?
助けてください。前もって感謝します。