- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用我自己的公钥和私钥初始化 RSACryptoServiceProvider。
据我所知,方法是调用构造函数
RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams);
cspParams 如上所示。但是,当我查看关于它的使用的 msdn 示例时: http://msdn.microsoft.com/en-us/library/ca5htw4f.aspx
我没有看到他们设置私钥或公钥的任何地方。仅使用 KeyContainer。当我创建一个没有 cspParam 的 RSACryptoServiceProvider 时,它默认设置为仅使用公钥。当我检查类本身的 PublicOnly 变量时,我注意到了这一点,它是一个只读变量。
我的问题是如何初始化这个类,然后设置我自己的私钥和公钥。服务器将使用私钥,而客户端将拥有公钥。
我发现创建一个 RSAParameter 对象并将其上的 .Exponent 和 .Modulus 参数分别设置为公共(public)变量和私有(private)变量。
但我收到了一个“缺少私钥”错误,因为我认为 RSACryptoServiceProvider 没有使用正确的构造函数进行初始化。
下面是我的一些代码。不要担心 BigInteger 类,它只是一个实验。无论我是否使用它,我都会得到同样的错误。
//Create a UnicodeEncoder to convert between byte array and string.
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] dataToEncrypt = ByteConverter.GetBytes(password);
byte[] encryptedData;
byte[] decryptedData;
//RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSAParameters rsap = new RSAParameters();
BigInteger n = new BigInteger("19579160939939334264971282204525611731944172893619019759209712156289528980860378672033164235760825723282900348193871051950190013953658941960463089031452404364269503721476236241284015792700835264262839734314564696723261501877759107784604657504350348081273959965406686529089170062268136253938904906635532824296510859016002105655690559115059267476786307037941751235763572931501055146976797606538425089134251611194500570922973015579287289778637105402129208324300035518642730384616767241853993887666288072512402523498267733725021939287517009966986976768028023180137546958580922532786773172365428677544232641888174470601681", 10);
BigInteger e = new BigInteger("65537", 10);
//rsap.Modulus = ByteConverter.GetBytes(publicKey);
rsap.Exponent = e.getBytes();
rsap.Modulus = n.getBytes();
/*rsap.Exponent = ByteConverter.GetBytes(publicKey);
rsap.D = ByteConverter.GetBytes(publicKey);
rsap.DP = ByteConverter.GetBytes(publicKey);
rsap.DQ = ByteConverter.GetBytes(publicKey);
rsap.P = ByteConverter.GetBytes(publicKey);
rsap.Q = ByteConverter.GetBytes(publicKey);
rsap.InverseQ = ByteConverter.GetBytes(publicKey);*/
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//RSA.PublicOnly = false;
RSA.ImportParameters(rsap);
Debug.Log ("PublicOnly: " + RSA.PublicOnly);
Debug.Log (rsap.Modulus.Length);
//Debug.Log (RSA.ToString());
//Pass the data to ENCRYPT, the public key information
//(using RSACryptoServiceProvider.ExportParameters(false),
//and a boolean flag specifying no OAEP padding.
//encryptedData = RSACSPSample.RSAEncrypt(dataToEncrypt, rsap, false);
encryptedData = RSACSPSample.RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
Debug.Log ("encryptedData: " + encryptedData);
//Display the decrypted plaintext to the console.
//Debug.Log("Decrypted plaintext: " + ByteConverter.GetString(""));
//Pass the data to DECRYPT, the private key information
//(using RSACryptoServiceProvider.ExportParameters(true),
//and a boolean flag specifying no OAEP padding.
decryptedData = RSACSPSample.RSADecrypt(encryptedData, RSA.ExportParameters(true), false);
}
//encryptedData = RSACSPSample.RSAEncrypt(dataToEncrypt, rsap, false);
//if (encryptedData != null) {
password = ByteConverter.GetString(decryptedData);
//}
最佳答案
这些字段的命名很糟糕,让您感到困惑。 Exponent
字段实际上是公钥的 public 指数。私钥的 private 指数是 D
字段。
MSDN 文档很烂不是你的错。
关于c# - RSACryptoServiceProvider 使用自己的公钥和私钥初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13654400/
如果您查看下面的代码,它只是创建了一个 RSACryptoServiceProvider 的新实例。 key 容器名称是从一个属性初始化的,该属性根据各种参数创建名称。我在此演示代码中添加了硬编码值。
我需要使用 RSA 加密一些文本,然后使用私钥恢复它。我的问题是 RSACryptoServiceProvider.Encrypt() 每次都输出不同的值,即使使用相同的 key 也是如此。这是我放入
有人告诉我,对于非对称加密,您可以使用公钥加密明文并使用私钥解密。所以我尝试了以下方法: static void Main(string[] args) { RSACr
我在 MSDN( see Important note ) 上读到必须处理 RSACryptoServiceProvider。他们给出了例子: using (RSACryptoServiceProvi
我对商店的证书有疑问。在我的应用程序中,用户可以使用文件中的证书或商店中的证书。加载证书后,我使用证书作为签名数据。 可以使用文件中的证书,但我不能使用商店中的等效证书。 签名代码: // Sign
我正在使用 key 对对我的 XML 进行签名(使用 SignedXml),并将公钥作为嵌入式资源嵌入到我的应用中。 这里是我如何创建 key 对 sn -k Warehouse.snk sn -p
我有以下使用 RSA 生成公钥和私钥的代码。 // generate RSA 1024 using (var rsa = new RSACryptoServicePro
我正在尝试使用我自己的公钥和私钥初始化 RSACryptoServiceProvider。 据我所知,方法是调用构造函数 RSACryptoServiceProvider RSAalg = new R
我目前正在尝试创建一个 RSACryptoServiceProvider对象仅来自解码的 PEM 文件。经过几天的搜索,我确实设法解决了一个可行的解决方案,但它不是一个可以用于生产的解决方案。 简而言
我们正在导出公钥和私钥。私钥将由用 Magic 编写的非 .net 软件使用。开发人员对导出 key 的格式有疑问。是否有白皮书或其他资源来解释导出数据的格式? 最佳答案 关于导出的 blob 类型的
我有使用 RSACryptoServiceProvider 在 C# 中生成的公钥: 4kKhD/FWAMtQTRifArfXjxZN+6bOXTkHrVpyz/1wODhSOB
我有一个 X509Certificate2 变量,我正在尝试将该变量的私钥转换为 RSACryptoServiceProvider RSACryptoServiceProvider pkey = (R
我需要解密文本,但收到消息 The parameter is incorrect。 证书获取正确,已在 Windows 中注册。 在搜索问题时,我可以阅读建议更改分配给 IIS 网站的应用程序池中的用
我使用 RSACryptoServiceProvider 加密了一段文本。我导出了公钥和私钥。显然我只是想在解码器应用程序中公开公钥,所以我编写了如下代码: private const string
如果我有一个从非托管应用程序创建的 key ,并且如果我想将此 key 导入托管应用程序并生成另一个 key 或对其进行加密。基本上相同的 key 将从托管和非托管代码来回导入/导出。 因此什么相当于
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Can RSACryptoServiceProvider (.NET’s RSA) use SHA256 f
一段时间以来,我一直在阅读 CodeProject 上的一篇文章,该文章解释了如何使用 RSA 提供程序进行加密和解密: RSA Private Key Encryption 虽然 2009 年的旧版
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.S
我正在尝试使用公钥加密与客户端和服务器进行通信。服务器应该生成一个 1024 位的公钥并将其发送给客户端,客户端将使用该 key 将加密数据发送回服务器。到目前为止,我已经用这个初始化了 RSACry
我目前正在处理一个简单的数据签名。这是我第一次使用签名,所以也许我做错了什么。但我认为使用 512 位 RSA 和 SHA1 哈希对 448 字节进行签名需要 4.6 秒是不正常的。 代码: byte
我是一名优秀的程序员,十分优秀!