有没有办法在 C#中执行私钥加密?
我知道中的标准RSACryptoServiceProvider
,System.Security.Cryptography
但这些类只提供公钥加密和私钥解密。此外,它们还提供数字签名功能,该功能使用内部私钥加密,但没有任何可公开访问的功能来执行私钥加密和公钥解密。
我在 codeproject 上找到了这篇文章,这是执行这种加密的一个很好的起点,但是,我正在寻找一些现成的代码,因为文章中的代码很难加密任意长字节包含随机值的数组(这意味着任何值,包括零)。
你知道一些很好的组件(最好是免费的)来执行私钥加密吗?
我用.NET 3.5
.
注意: 我知道这通常被认为是使用非对称加密的不好方法(使用私钥加密并使用公钥解密),但我只需要那样使用它。
附加说明
考虑你有
var bytes = new byte[30] { /* ... */ };
并且您想使用它2048bit RSA
来确保没有人更改此数组中的任何内容。
通常,您将使用数字签名(即。RIPEMD160
),然后将其附加到原始字节并发送给接收者。
所以,你有30 字节的原始数据,以及额外的 256 字节的数字签名(因为它是 a 2048bit RSA
),总共286 字节。然而,这256 个字节中只有160 位实际上是散列的,因此正好有1888 位(236 个字节)未使用。
所以,我的想法是这样的:
取30 字节的原始数据,附加哈希(20 字节),现在加密这50 字节。您会收到256 字节长的消息,比286 字节短得多,因为“您能够将实际数据推送到数字签名中”。
ECDSA 资源
MSDN
Eggheadcafe.com
c-plusplus.de
MSDN 博客
Wiki
DSA 资源
最终解决方案
如果有人对我如何解决这个问题感兴趣,我将使用1024bit DSA
and SHA1
,它在许多不同版本的 Windows(Windows 2000
和更新版本)上得到广泛支持,安全性足够好(我没有签署订单,我只需要以确保某些孩子无法破解他 iPhone 上的签名 (:-D)),并且签名大小只有40 字节长。