RSA加密仅在运行iOS 9的iPhone 4s上失败



我成功地RSA-Encrypting了一个字符串,但是当我在iPhone 4s(iOS 9.3.2)上执行此操作时,它失败并因此返回'nil'。但是,它已成功在所有其他iPhone(5,6,7,8,X)上运行。

我正在使用这个 RSA 公钥:

"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClTlHEResIvOPHR0+o4exJVEI5RQ4NnBBXV9tdoCbqavSgsiuFtZWn5RUVTLb0h7ULpOh8GDcu0yI4lnpMVDZ5U2w0ra2/BNl6XDt9bwwoOh5w2lsdVmdP94t/qVBX4C0OcXw+RdSD1pshucTO7m2YLxtzLuc4ChUwjWZXVEoHdQIDAQAB">

实际上,正是在这一行代码中,我得到了&keyRef 'nil'

err = SecItemCopyMatching(dictionary as CFDictionary, &keyRef);

这是我的代码;

func encryptString(stringToEncrypt:String) -> String {
print("stringToEncrypt64 = " + stringToEncrypt)
let keyData = NSData(base64Encoded: Constants.RSA_Public_Key, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)
let dictionary: [NSString: AnyObject] = [
kSecClass: kSecClassKey,
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeyClass: kSecAttrKeyClassPublic,
kSecAttrApplicationTag: "HBLMobilePublicKeyTag" as AnyObject,
kSecValueData: keyData!,
kSecAttrKeySizeInBits: NSNumber(value: 1024),
kSecReturnRef: true as AnyObject
];
var err = SecItemAdd(dictionary as CFDictionary, nil);
if ((err != noErr) && (err != errSecDuplicateItem)) {
print("error loading public key");
}
var keyRef: AnyObject?;
var base64String: String?
err = SecItemCopyMatching(dictionary as CFDictionary, &keyRef);
if (err == noErr) {
if let keyRef = keyRef as! SecKey? {
let plaintextLen = stringToEncrypt.lengthOfBytes(using: String.Encoding.utf8);
let plaintextBytes = [UInt8](stringToEncrypt.utf8);
var encryptedLen: Int = SecKeyGetBlockSize(keyRef);
var encryptedBytes = [UInt8](repeating: 0, count: encryptedLen);
err = SecKeyEncrypt(keyRef, SecPadding.PKCS1, plaintextBytes, plaintextLen, &encryptedBytes, &encryptedLen);
let data = NSData(bytes: encryptedBytes, length: encryptedBytes.count)
base64String = data.base64EncodedString(options: [])
}
}
SecItemDelete(dictionary as CFDictionary);
return base64String!
}

也许是iPhone 4s已经过时了。如果版本与ios-9上的所有手机相同,则可能是手机上的硬件。或者可能是您没有足够的空间将应用程序存储在手机上以使其工作。可能是一半的文件在手机上,并且它说Completed Transfer当它没有完成它时。

对不起,我只是说我对软件的了解(我对 iPhone 一无所知)。

最新更新