2048位RSA公钥在IOS中被误读为1024位?

2048位RSA公钥在IOS中被误读为1024位?,ios,xcode,encryption,openssl,rsa,Ios,Xcode,Encryption,Openssl,Rsa,我已在Linux设备上使用以下命令生成了RSA密钥对: openssl genrsa -out private.pem 2048 openssl pkcs8 -topk8 -inform PEM -in private.pem -outform DER -out private.der -nocrypt openssl req -new -x509 -keyform PEM -key private.pem -outform DER -out public.der 运行以下命令可确认“公钥:(

我已在Linux设备上使用以下命令生成了RSA密钥对:

openssl genrsa -out private.pem 2048
openssl pkcs8 -topk8 -inform PEM -in private.pem -outform DER -out private.der -nocrypt
openssl req -new -x509 -keyform PEM -key private.pem -outform DER -out public.der
运行以下命令可确认“公钥:(2048位)”:

在我的IOS应用程序中,我从网络读取public.der文件的字节,然后提取公钥,如下所示:

NSData *certificateData = [RequestManager getDataFromUrl:@"http://dyner.me/crypto.der"];
if (certificateData) {
    SecCertificateRef certificateFromFile = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData);
    SecPolicyRef secPolicy = SecPolicyCreateBasicX509();
    SecTrustRef trust;
    OSStatus statusTrust = SecTrustCreateWithCertificates(certificateFromFile, secPolicy, &trust);
    SecTrustResultType resultType;
    OSStatus statusTrustEval =  SecTrustEvaluate(trust, &resultType);
    SecKeyRef publicKey = SecTrustCopyPublicKey(trust);
}
然而,结果SecKeyRef显示1024位的块大小:

<SecKeyRef algorithm id: 1, key type: RSAPublicKey, version: 3, block size: 1024 bits, exponent: {hex: 10001, decimal: 65537}, modulus: B9059150BD2933FEC3E2DAC6036E5FE7FC61CEE8B7081AD6BCCE2FA0F340232CFE3DD0B025E6DCFD3755F732ED8292F687DE421AD46FAFA5672ACC2D1C875D4644ED7ACF07E8EA3CAEDF245A27BF61ED1E0AD57D2B4F92AE1222C51A8A980E5D2C7308592E179B4EEE811C6A97358B9F87A9BEB7A08B6893CC1CBBA231B38E85, addr: 0x7f86ca831600>


为什么这个块大小不是“2048位”

看起来不像是同一把钥匙。模量是完全不同的。您最近是否更换了服务器上的旧密钥?是的,我尝试了几次以不同的方式制作证书。它们最后都会说“2048位”,并且不能用上面的IOS代码读取。它们被可疑地读取,并且SecKeyRef似乎包含一个有效的1024位公钥。我用它加密了少量数据(<128字节),这些数据在服务器上用它的私钥成功解密。有什么想法吗?我还没有整理好。我想说的是,是否有可能之前下载的密钥被缓存在设备上,这样您就可以一遍又一遍地看到相同的密钥,而不需要从服务器上实际获取它?
<SecKeyRef algorithm id: 1, key type: RSAPublicKey, version: 3, block size: 1024 bits, exponent: {hex: 10001, decimal: 65537}, modulus: B9059150BD2933FEC3E2DAC6036E5FE7FC61CEE8B7081AD6BCCE2FA0F340232CFE3DD0B025E6DCFD3755F732ED8292F687DE421AD46FAFA5672ACC2D1C875D4644ED7ACF07E8EA3CAEDF245A27BF61ED1E0AD57D2B4F92AE1222C51A8A980E5D2C7308592E179B4EEE811C6A97358B9F87A9BEB7A08B6893CC1CBBA231B38E85, addr: 0x7f86ca831600>