我有一个从Java服务器发送的公钥.在解码和删除ASN.1标头之前,base64编码的字符串匹配.我将公钥存储在钥匙串中SecItemAdd.
所以我正在尝试使用公钥加密数据,并使用Java中的私钥对其进行解密.我正在SecKeyEncryptiOS端和CipherJava端使用.
我正在加密的是加密我的实际数据的对称AES密钥,因此密钥长度为16个字节.当简单地对base64进行编码时,一切正常,所以我知道这个RSA加密有问题.
这是我的iOS调用示例:
OSStatus sanityCheck = SecKeyEncrypt(publicKey,
kSecPaddingPKCS1,
(const uint8_t *) [incomingData bytes],
keyBufferSize,
cipherBuffer,
&cipherBufferSize
);
Run Code Online (Sandbox Code Playgroud)
这是我的Java调用的一个例子:
public static byte[] decryptMessage (byte[] message, PrivateKey privateKey, String algorithm) {
if (message == null || privateKey == null) {
return null;
}
Cipher cipher = createCipher(Cipher.DECRYPT_MODE, privateKey, algorithm, false);
if (cipher == null) {
return null;
}
try {
return cipher.doFinal(message);
}
catch (IllegalBlockSizeException e) {
e.printStackTrace(); //To change body of catch statement use …Run Code Online (Sandbox Code Playgroud)