加密在 linux 下在 .NET Core 2.1 中生成的消息添加前导字节
Encryption a message which was generated in .NET Core 2.1 under linux adds leading bytes
如果有以下情况:
- 客户端应用程序在 Raspian 上运行 .NETCore 2.1 (Linux)
- 它使用 public 证书 (RSA)
加密消息
- 将此加密邮件发送到 windows 服务器
- 此服务器解密消息
- 现在数据在文本的开头多了 2 个字节!
示例:在 linux 下加密 "Hallo welt" 会导致 windows 中出现“\u0004\nHallo 贴边”。
对我来说,.NETCore 加密的 linux 实现中似乎存在错误,或者(可能是填充问题)?
加密完成
public static byte[] Encrypt(byte[] plainData, X509Certificate2 certificate) {
var message = new EnvelopedCms(new ContentInfo(plainData));
message.Encrypt(new CmsRecipient(SubjectIdentifierType.IssuerAndSerialNumber, certificate));
return message.Encode();
}
解密:
public static byte[] Decrypt(byte[] encryptedData, X509Certificate2 certificate) {
var message = new EnvelopedCms();
message.Decode(encryptedData);
message.Decrypt(new X509Certificate2Collection {certificate} );
return message.ContentInfo.Content;
}
如果需要,我也可以提供一个非常简单的示例项目...
这是 .NET Core 中的已知错误,将在 3.0 中修复...
如果有以下情况:
- 客户端应用程序在 Raspian 上运行 .NETCore 2.1 (Linux)
- 它使用 public 证书 (RSA) 加密消息
- 将此加密邮件发送到 windows 服务器
- 此服务器解密消息
- 现在数据在文本的开头多了 2 个字节!
示例:在 linux 下加密 "Hallo welt" 会导致 windows 中出现“\u0004\nHallo 贴边”。
对我来说,.NETCore 加密的 linux 实现中似乎存在错误,或者(可能是填充问题)?
加密完成
public static byte[] Encrypt(byte[] plainData, X509Certificate2 certificate) {
var message = new EnvelopedCms(new ContentInfo(plainData));
message.Encrypt(new CmsRecipient(SubjectIdentifierType.IssuerAndSerialNumber, certificate));
return message.Encode();
}
解密:
public static byte[] Decrypt(byte[] encryptedData, X509Certificate2 certificate) {
var message = new EnvelopedCms();
message.Decode(encryptedData);
message.Decrypt(new X509Certificate2Collection {certificate} );
return message.ContentInfo.Content;
}
如果需要,我也可以提供一个非常简单的示例项目...
这是 .NET Core 中的已知错误,将在 3.0 中修复...