我正在尝试在我的C#程序中实现RSA加密。
这是我的代码:
using System;
using System.Security.Cryptography;
string dataToEncrypt = "Data to Encrypt here";
string modulus= "Public Key here";
string exponent= "Public Key Kxpiry here";
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
RSAParameters RSAKeyInfo = new RSAParameters();
RSAKeyInfo.Modulus = Encoding.UTF8.GetBytes(modulus);
RSAKeyInfo.D = Encoding.UTF8.GetBytes(dataToEncrypt);
RSAKeyInfo.Exponent = Encoding.UTF8.GetBytes(exponent);
RSA.ImportParameters(RSAKeyInfo);
我收到这个错误代码:
<代码>系统。安全密码学。CryptographicException:“错误数据。”
这一行给出了错误:RSA。导入参数(RSAKeyInfo)
其他信息:
Visual Studio 2019
我错过了什么/做错了什么?
RSA密钥生成是一个非常具体的过程,它依赖于或两个(或多个)素数。您不能只是为RSA选择随机值以确保安全。话说回来,RSA在加密过程中依赖于模块化幂,这可能仍然“有效”,即生成不安全的答案。
然而,CSP(加密服务提供商)可能会带来额外的限制。例如,Microsoft CSP对密钥大小有以下限制:
Windows CSP为Windows 8.1之前的Windows版本启用384到16384位的密钥大小,为Windows 8.1启用512到16384位的密钥大小。
因为密钥大小被指定为模数的大小。此外,密钥大小也必须是8的倍数。这意味着字节数组中的最高有效位必须设置为1,UTF-8从来没有这种情况。
此外,公众指数也可能受到限制;对于Windows CSP,它需要小于32位。通常只需将其设置为值010001 hex(65537或Fermat的第五个素数,称为F4)。
RSA的CNG植入似乎更灵活,所以如果你想测试RSA的一些细节,你也可以尝试一下。
但是,最终您需要使用RSA密钥对生成过程来创建有效的RSA密钥对;其他任何东西都不安全。
在大多数情况下,这一过程取得了成功。但RSACryptoServiceProvider将引发一个异常: 错误似乎是随机出现的。 下面是一些jsencrypt可以加密和解密,但C#解密失败的例子。每个数组的前两个元素是源数据和JSEncrypt解密的数据。每个数组的最后一个元素是C#无法解密的加密数据。 下面是解密数据的C#代码示例: 下面是加密数据的js代码示例:
我用RSA加密来加密C#中的一些数据。现在我想用Java解密加密的数据。但是我遇到了一些问题。 主要问题可能是将加密消息从c#获取到java。在c#中,我们有无符号字节,字节序是不同的 因此,为了进行测试,我将c#中加密数据的数组转换为数组并获得它的字符串表示形式。然后我将字节数组的字符串表示形式复制到我的java代码中并将其转换回“字节”数组。之后,我反转数组以匹配java的endianess。
在C#中解密RSA加密字符串时,我得到的错误是,要解密的数据超过了256字节模的最大值。 我正在努力实现的目标: 在C#(RSA)中生成公钥/私钥对 将私钥保存在会话/临时存储中,以便在解密期间使用 向客户端/JS发送/返回公钥以用于加密 用公钥加密JS中的字符串(最多20个字符)并发送到服务器 使用步骤2中保存的私钥解密服务器中加密的字符串 工作原理: 公钥/私钥对的生成 在JS中使用库jscr
我收到一个错误解密在C#中加密的消息(使用相应的公钥/私钥) 我的客户端是用C编写的,服务器是用Go编写的。我通过go的crypto/rsa包生成了一个私钥和公钥(使用rsa.GenerateKey(随机读取器,bits int))。然后,我将生成的公钥文件存储在客户端可以访问的地方,将私钥存储在服务器可以访问的地方。我使用以下代码(使用bouncy castle)在客户端上加密: go服务器从标
我试图通过RSA加密字符串。我也有java样本,但我不能正确地将其转换为c#。 RSA示例: 这是我在c#中生成的代码,但我的c#代码结果与javaCode结果不同。我的代码怎么了?