使用来自seckeygeneratepair的publicKey进行加密

时间:2018-08-23 05:34:38

标签: c# ios swift encryption public-key-encryption

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

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

我最经常遇到的问题是使用Windows存储中的证书进行基于证书的加密,我似乎无法将其公钥放入我先前遇到的示例中。有人尝试过这样的事情吗?

  1. 该应用会生成一个公钥对,并向我提供公钥。
  2. 在服务器上,我使用公开密钥对邮件进行加密。
  3. 在应用程序上,使用私钥解密消息。

这里有一些我已经阅读过的参考文献,但似乎没有一个符合要求。

https://docs.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

1 个答案:

答案 0 :(得分:0)

经过反复试验,这里是从中吸取的教训。

  • 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); } }