有什么方法可以在 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 DSA
和 SHA1
,它们在许多不同版本的 Windows( Windows 2000
和更新版本)上得到广泛支持,安全性足够好(我不签署订单,我只需要确保某些 child 无法破解他 iPhone 上的签名 (:-D)),并且签名大小只有 40 字节 长。 最佳答案
您尝试设计的内容称为“带消息恢复的签名方案”。
设计一个新的签名方案很困难。设计一个带有消息恢复的新签名方案更难。我不知道您的设计的所有细节,但很有可能它很容易受到选定的消息攻击。
具有消息恢复功能的签名方案的一种建议是 RSA PSS-R。但不幸的是,该提案已获得专利。
IEEE P1363 标准化组曾经讨论过添加带有消息恢复的签名方案。但是,我不确定这项工作的当前状态,但可能值得一试。
关于c# - RSA私钥加密,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3322166/