Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RSA.ImportParameters()中的加密异常-特殊1024密钥中的错误数据_C#_Rsa_Private Key_Cryptographicexception - Fatal编程技术网

C# RSA.ImportParameters()中的加密异常-特殊1024密钥中的错误数据

C# RSA.ImportParameters()中的加密异常-特殊1024密钥中的错误数据,c#,rsa,private-key,cryptographicexception,C#,Rsa,Private Key,Cryptographicexception,我们有一个C#/.Net 4.0应用程序,它从Web服务中接收的Base64中的字符串导入RSA私钥 该应用程序适用于1024位的RSA密钥,但不适用于特殊类型的RSA私钥(约占密钥的1%) 以下是字节长度: 工作键: 模数=>128字节 指数=>3字节 D=>128字节 P=>64字节 Q=>64字节 DP=>64字节 DQ=>64字节 IQ=>64字节 不工作键: 模数=>128字节 指数=>3字节 D=>127字节 P=>64字节 Q=>64字节 DP=>64字节 DQ=>64字节

我们有一个C#/.Net 4.0应用程序,它从Web服务中接收的Base64中的字符串导入RSA私钥

该应用程序适用于1024位的RSA密钥,但不适用于特殊类型的RSA私钥(约占密钥的1%)

以下是字节长度:

工作键:

  • 模数=>128字节
  • 指数=>3字节
  • D=>128字节
  • P=>64字节
  • Q=>64字节
  • DP=>64字节
  • DQ=>64字节
  • IQ=>64字节
不工作键:

  • 模数=>128字节
  • 指数=>3字节
  • D=>127字节
  • P=>64字节
  • Q=>64字节
  • DP=>64字节
  • DQ=>64字节
  • IQ=>64字节
区别在于D的长度(128工作,127不工作)。非工作密钥比工作密钥短1字节

参数已设置,但在执行RSA.ImportParameters(rsaparms)时,它会抛出带有“坏数据”消息的加密异常


解决此问题应包括哪些内容?

rsacyptoserviceprovider
对数据长度有一些假设,即:

  • 模数:任意偶数大小,我们称之为长度
    n

  • 指数:(
    Yep。这通常是因为
    D
    在ASN.1中存储为
    INTEGER
    ,而ASN.1编码规则规定必须以尽可能短的形式对整数进行编码。因此,在整数<所需大小的情况下,很可能是因为整数的零不重要。
    byte[] newD = new byte[modulus.Length];
    Buffer.BlockCopy(d, 0, newD, newD.Length - d.Length, d.Length);