c# - RSA私钥加密

标签 c# .net encryption rsa encryption-asymmetric

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

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

我找到了 this article on codeproject ,这是执行此类加密的一个很好的起点,但是,我一直在寻找一些现成的代码,因为本文中的代码很难加密包含随机值<的任意长字节数组/em>(这意味着任何值,包括零)。

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

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

补充说明

考虑一下

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

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

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

因此,您有30 字节 的原始数据,以及额外的256 字节 数字签名(因为它是2048 位RSA),总共 286 字节。但是,256 字节 中只有 160 位 实际上是散列,所以恰好有 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/

相关文章:

javascript - 使用 VS 2013 的自定义自动格式化程序 "Edit->Format Document"

c# - 适用于 .NET 的 OData 4.x 解析器

.net - 如何从商店导出不可导出的私钥

algorithm - 为RSA加密算法生成大素数

c# - 这个尾部递归是否会导致堆栈溢出? C# .Net

c# - 起订量。执行作为参数给出的操作

c# - 在 .NET 中调用基类中的测试方法

java - 为什么这个 AES 加密程序在每次调用时给出不同的值?

c# - 用于执行的队列多线程方法

.net - NHibernate HQL不支持 "with"关键字吗?