c# – RSA私钥加密

有没有办法在C#中执行私钥加密?

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

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

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

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

附加说明

考虑一下你

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

并且您希望使用2048位RSA以确保没有人更改此阵列中的任何内容.

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

因此,您有30个字节的原始数据,以及额外的256个字节的数字签名(因为它是一个2048位的RSA),总共286个字节. Hovewer,这256字节中只有160位实际上是散列的,所以没有使用1888位(236字节).

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

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

ECDSA资源

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

DSA资源

CodeProject
MSDN 1
MSDN 2
MSDN 3

最终解决方案

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

最佳答案
您尝试设计的内容称为“具有消息恢复的签名方案”.

设计新的签名方案很难.设计具有消息恢复的新签名方案更加困难.我不知道有关您的设计的所有细节,但它很可能容易受到选择的消息攻击.

有关消息恢复的签名方案的一个提议是RSA PSS-R.但遗憾的是,该提案已获得专利保护.

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

转载注明原文:c# – RSA私钥加密 - 代码日志