使用来自 seckeygeneratepair 的公钥进行加密



我们的 iOS 开发人员使用以下文档生成了私钥/公钥。其他详细信息包括使用 RSA 2048,填充为 PKCS1。

https://developer.apple.com/documentation/security/1395339-seckeygeneratepair?language=objc

我主要遇到使用Windows商店中的证书的基于证书的加密,我似乎无法将他们的公钥放入我以前遇到的示例中。有没有人尝试过这样的事情?

  1. 该应用程序生成一个公钥对,并为我提供了公钥。
  2. 在服务器上,我使用公钥加密消息。
  3. 在应用程序上,消息使用私钥解密。

以下是我读过的一些参考资料,但似乎都不符合这一点。

https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsacryptoserviceprovider?view=netframework-4.7.2 https://codereview.stackexchange.com/questions/92761/very-simple-asymmetric-rsa-encryption-in-c

经过一些试验和错误,以下是从中吸取的教训。

  • iOS 应按以下格式返回有效的 RSA 公钥。以前,生成的密钥不是标准格式,因此只有iOS对其进行加密和解密。这里还有一行验证它。

    openssl rsa -in example.pem -text -pubin -RSAPublicKey_in

    -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAz1zfbybUt5jZX5P6ymy+g04wj3iTYCV8eGbkFyqFNsfN8Lnk6x4x zstfnpE6asV6NkBecQnT1a9X6AVxA4Mxq4CeysR10TRr8HGczQGKl7R3Nbvvmgw+ jX8LZGxsQTO6qYWhMAtOPFfsMW9iy3AsDE7OIYfya6y/l919ExbgPzJ+0nLdiBmd bmmzOQ1PaKt3OcxG6qZyBoixRTTOm4UDCLDzYdjz5dS1rbvb7pD15TpkZBkuMRm5 QDv+xhKcz1UFGQP7ssZS++ZoQlF2CZJuLz8R1uUYg4xQnF0r1IBBrlVtKnblgMcA ZykNweGwrdPaWF3PeZmbvG+/m+Kt7/4BJwIDAQAB -----END RSA PUBLIC KEY-----

  • 在.NET方面,我能够加密文本,但我需要使用充气城堡来做到这一点。下面是一个示例代码。

    public string Encrypt(string plainText, string publicKey) { UTF8Encoding ByteConverter = new UTF8Encoding(); using (RSACryptoServiceProvider csp = new RSACryptoServiceProvider()) { PemReader reader = new PemReader(new StringReader(publicKey)); object kp = reader.ReadObject(); csp.ImportParameters(DotNetUtilities.ToRSAParameters((kp as RsaKeyParameters))); var encryptedData = csp.Encrypt(data: ByteConverter.GetBytes(plainText), padding: RSAEncryptionPadding.Pkcs1); return Convert.ToBase64String(encryptedData); } }

最新更新