【问题标题】:Encrypting using publicKey from seckeygeneratepair使用来自 seckeygeneratepair 的 publicKey 进行加密
【发布时间】:2019-01-29 10:15:36
【问题描述】:
【问题讨论】:
标签:
c#
ios
swift
encryption
public-key-encryption
【解决方案1】:
经过一些试验和错误,这里是从中吸取的教训。
-
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);
}
}