Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在iOS上生成匹配的RSAPublicKey,以与来自Android的共享RSAPublicKey(或组件)匹配_Java_Android_Ios_Rsa_Keychain - Fatal编程技术网

Java 在iOS上生成匹配的RSAPublicKey,以与来自Android的共享RSAPublicKey(或组件)匹配

Java 在iOS上生成匹配的RSAPublicKey,以与来自Android的共享RSAPublicKey(或组件)匹配,java,android,ios,rsa,keychain,Java,Android,Ios,Rsa,Keychain,我正在尝试在iOS上生成匹配的公钥,以存储来自Android的共享公钥,用于非对称密钥加密操作。从Android共享公钥以便在iOS上重新创建公钥的最佳方式是什么 我使用Apple的SecKeyWrapper类使用addPublicKey:keyBits:方法创建公钥。尽管secItemAdd似乎成功了,但它始终无法从SecItemMatching()返回生成的PublicKeyRef,因为尽管状态为success,它始终为nil。 面临与下面链接中讨论的完全相同的行为:(但是,建议的解决方案也

我正在尝试在iOS上生成匹配的公钥,以存储来自Android的共享公钥,用于非对称密钥加密操作。从Android共享公钥以便在iOS上重新创建公钥的最佳方式是什么

我使用Apple的SecKeyWrapper类使用addPublicKey:keyBits:方法创建公钥。尽管secItemAdd似乎成功了,但它始终无法从SecItemMatching()返回生成的PublicKeyRef,因为尽管状态为success,它始终为nil。 面临与下面链接中讨论的完全相同的行为:(但是,建议的解决方案也不起作用):

我尝试了以下方法:

方法#1。Android:从RSAPublicKey中提取模数和指数,分别编码为base64编码,并与iOS共享。 iOS:从共享模数和指数创建相应的NSData组件,并使用SCZ BasicEncodingRules类的berData操作创建密钥数据对象,以创建原始密钥对象,并与SecKeyWrapper共享此输出以生成密钥

接近#2。Android:从RSAPublicKey中提取模数和指数,分别编码为UTF8Encoding,并与iOS共享。 iOS:从共享模数和指数创建相应的NSData组件,并使用SCZ BasicEncodingRules类的berData操作创建密钥数据对象,以创建原始密钥对象,并与SecKeyWrapper共享此输出以生成密钥。 参考:

或者,还尝试了CryptoUtil类从模和指数生成KeyObject,这产生了完全相同的行为

接近#3。安卓:在RSAPublcKey上调用.toString()并将输出字符串编码为base64编码,并与iOS共享。 iOS:从Base64编码密钥创建NSData,并与SecKeyWrapper共享此输出以生成密钥。这是agin产生的相同结果

接近#4。安卓:在RSAPublcKey上调用.toString()并将输出字符串编码为base64编码,并与iOS共享。 iOS:试图使用wingsofhermes描述的方法创建KeyData对象,但无论如何,该方法会立即返回错误格式的false

也就是说,我无法区分输入的密钥数据是否出错,或者@iOS的密钥生成是否出错。
非常感谢您的帮助

进一步研究后,我发现iOS的secKeyWrapper只能接受ASN.1 DER格式的密钥数据。 任何以任何其他格式传递数据的尝试都肯定会在iOS上失败

通过以PEM格式转储RSA密钥解决了此问题,并使用以下链接中的方法读取PEM并转换为ASN.1 DER格式,并将其传递给SecKeyWrapper!

备选办法: 这个问题也可以通过使用OpenSSL iOS库(请参阅)来解决,并使用从任何其他平台共享的公钥的输入模和指数(base64encoded)数据创建RSA对象