有什么方法可以在 C# 中执行 私钥加密 吗?

我知道 RSACryptoServiceProvider 中的标准 System.Security.Cryptography ,但这些类只提供 公钥加密 私钥解密 。此外,它们提供数字签名功能,该功能在内部使用 私钥加密 ,但没有任何可公开访问的函数来执行 私钥加密 公钥解密

我找到了 this article on codeproject ,这是执行这种加密的一个很好的起点,但是,我正在寻找一些现成的代码,因为文章中的代码几乎无法加密包含随机的任意长字节数组值(这意味着任何值,包括零)。

你知道一些好的组件(最好是免费的)来执行 私钥加密 吗?
我使用 .NET 3.5

注意: 我知道这通常被认为是使用非对称加密(使用私钥加密和使用公钥解密)的糟糕方式,但我只需要这样使用它。

附加说明

考虑你有

var bytes = new byte[30] { /* ... */ };

并且您想使用 2048bit RSA 来确保没有人更改此数组中的任何内容。

通常,您会使用数字签名(即 RIPEMD160 ),然后将其附加到原始字节并发送给接收者。

因此,您有 30 字节 原始数据,还有 额外的 256 字节 数字签名(因为它是 2048bit RSA ),这是 286 字节 的总和。然而,只有 160 位 256 字节 实际上是散列,所以正好有 1888 位 ( 236 字节 )未使用。

所以,我的想法是这样的:

取原始数据的 30 字节 ,附加哈希( 20 字节 ),现在加密这些 50 字节 。您会得到 256 字节 长消息,这比 286 字节 短得多,因为“您能够将实际数据推送到数字签名中”。

ECDSA资源

MSDN
Eggheadcafe.com
c-plusplus.de
MSDN Blog
Wiki

动态搜索广告资源

CodeProject
MSDN 1
MSDN 2
MSDN 3

最终解决方案

如果有人对我如何解决这个问题感兴趣,我将使用 1024bit DSASHA1 ,它们在许多不同版本的 Windows( Windows 2000 和更新版本)上得到广泛支持,安全性足够好(我不签署订单,我只需要确保某些 child 无法破解他 iPhone 上的签名 (:-D)),并且签名大小只有 40 字节 长。

最佳答案

您尝试设计的内容称为“带消息恢复的签名方案”。

设计一个新的签名方案很困难。设计一个带有消息恢复的新签名方案更难。我不知道您的设计的所有细节,但很有可能它很容易受到选定的消息攻击。

具有消息恢复功能的签名方案的一种建议是 RSA PSS-R。但不幸的是,该提案已获得专利。

IEEE P1363 标准化组曾经讨论过添加带有消息恢复的签名方案。但是,我不确定这项工作的当前状态,但可能值得一试。

关于c# - RSA私钥加密,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3322166/

10-16 08:59