相关疑难解决方法(0)

如何在c#中填写RSAParameters值

我在我的项目中使用下面的代码进行加密,一切正常.

RSACryptoServiceProvider x_alg = new RSACryptoServiceProvider(  );

// export only the public key 
RSAParameters x_public_params = x_alg.ExportParameters(false);

// export the private key 
RSAParameters x_private_params = x_alg.ExportParameters(true);
Run Code Online (Sandbox Code Playgroud)

现在客户端更改了要求,并且他希望将所有RSAParameters值存储到配置文件中,并提供以下详细信息用于演示

<project name="netCard Server1">
  <key length="256"></key>
  <D length="64">00000000000000000000000000000000000000000000000000000000000019C5</D>
  <DP length="32">00000000000000000000000000000061</DP>
  <DQ length="32">00000000000000000000000000000065</DQ>
  <Exponent length="6">000DCD</Exponent>
  <InverseQ length="32">0000000000000000000000000000003B</InverseQ>
  <Modulus length="64">0000000000000000000000000000000000000000000000000000000000002C95</Modulus>
  <P length="32">00000000000000000000000000000065</P>
  <Q length="32">00000000000000000000000000000071</Q>
  <text length ="64">0123456789ABCDEF111111111111111125FE2222222222222233333333334444</text>
  <cipher length ="64">0000000000000000000000000000000000000000000000000000000000000000</cipher>
</project>
Run Code Online (Sandbox Code Playgroud)

现在,问题是当我导入RSAParameters值时,我收到了错误的数据异常

c# rsa public-key-encryption

6
推荐指数
1
解决办法
1万
查看次数

将RSA加密参数从CRT(中国剩余定理)映射到.NET格式

我需要使用C#实现RSA加密/解密

我有一个包含以下参数的私钥:

mod n,exponent,p,q,dP,dQ,和(p-1mod q)

以上参数在中文余数算法中进行了解释

但是,RSA的C#.NET实现具有以下不同的参数集:

Modulus,Exponent,P, Q,DP,DQ,D,InverseQ

当我试图将数据映射CRT到时DOTNET,我得到错误Bad Data

对于 p,q,dP以及dQ映射是明显的,但有关的参数,其余的我不知道.

如果我可以获得映射这些参数的帮助,那就太棒了

.net c c# rsa chinese-remainder-theorem

6
推荐指数
1
解决办法
2194
查看次数

RSA解密,仅使用D,P,Q,U参数(GnuPG)

我有一个RSA私钥,它只包含D,P,Q,U参数.

键符号http://www.gnupg.org/documentation/manuals/gcrypt/RSA-key-parameters.html

JavaScript进行解密

<html>
<head>
<SCRIPT SRC="http://eu.static.mega.co.nz/crypto_1.js"></SCRIPT>
<SCRIPT SRC="http://eu.static.mega.co.nz/rsa_1.js"></SCRIPT>
<SCRIPT SRC="http://eu.static.mega.co.nz/hex_1.js"></SCRIPT>
<SCRIPT>
function t()
{
// hex2s - conversion functions: hex to string
// mpi2b - conversion functions: num array <-> multi precision integer (mpi) mpi: 2 octets with length in bits + octets in big endian order
    t = mpi2b(hex2s('080043e8950c95dbc8fdea8fd39dfbc65f4ff31ee4824d8e8ceabdf45cbb928b29863e80154b656f04510e983810889f5d12cee85369743db65b0b54949ff5320c9ed98f3bb6b12a2c26e16a1b8414955034c0ed35b21e9bbc58d8447db85f9c760057656bb3a7b5c80726d287b5bc312525bff7864ba2dc2c627cd50e3d752cd585cb301d327f209974e29ddcd1ac51e99209f1d1f96c9fef5ef810b32a54555b5d7cc69c2a107d717744b5167a8962ca08aaac717768e8235795b21dcd186ba348317e685f07f9a2cac14089242b6edb989c8818054de2f69de34653c3e2d8b70947278f44a8995eb5c3568460dbe8e7a1cf31466556454703b045cef1c61e8d09'));   
    p = mpi2b(hex2s('04009868b3fea798829975abd91d27982462b66aced52f1472f243dadbf9e2e551388bb55750764cfc6ff5b89345285c0faa18924ee392f729d7980a6e1f62bff79584eee9e23d23d53a5034198b44dce9791eb367243a9ec6973eb09b574b65c4156a999fdf48770035c488efc568ad80b5dc73e9ca6c67bf9f09bdb31d175f25e5'));
    q = mpi2b(hex2s('0400d8ff209b2a325f66deee452e11b0306e7bc21dd99cdb8d175c8a08973f8b105b51a7a95b38d09ce72bf81178fbc902b3da791490d80bb0b6a8fa5e1c08636c57be45dbcc7b8c0da95390974f07456da5ca522f126b29b5226047432889482d983eb57679fe4e8d90aef2e06d8dbd0b6fa280b69ffddbd9c16bcd5f5569cef1f1'));
    d = mpi2b(hex2s('07fd1e65b3aa438c9cb5ea6b14590d32945f907d1fb6053541e3c250b5a60b67a477e5bfd2e79d0d4bdb6bde9403ab908723aeee25bfe69665fecc028c2fe4df2c51c8579235cc25f888055dc1da529017c4f4e38b95486b036345bb4c03f75b37c305002916a7f2ffe7a03b1b72bb7836560d556627b7bfff9357cdc73e6ed790f3bf79c6cd0fcd98ef2d96e369e780b3b213d3a5b7df8a373585bda0d22da00f7737ecf59ec0fc68056e65eda05c5940fbb3109d97db8ff135b472117467ec47620736b9e39a70723f33d59dea5a98d18bae8c89aa1be77daf692f5407c8433bd0b85cc13de12e7f8b85d27b147e2e8e337fc1157b0cb76ef90e479b5059ba27f1'));
    u = mpi2b(hex2s('03fe233721f3bda1e05d44de087b67749f4daafe02af79c183b2f41e040b6364a870c0896b84073de0fc1b7b2faee9100a250773282b6d9d935d30c1db2c7ef3daa017519dbb8d94edd32bde9ee0d460cb09d782b88f11552b810a595f6d26d12c38ee74c36d830b9d496947eeb878e6459b120bf747a28761926094797a4a5c9b68'));

    sid = base64urlencode(b2s(RSAdecrypt(t,d,p,q,u)).substr(0,43));

    if (sid=='tajetAbW0qTQGFlwp8iD5lQ0TFV1QUZJZFVvjRX7Xx-bPzYBoau7qog09w')
        console.log("Decrypting work");
}
</script>
</head>
<body onload="t();" />
</html>
Run Code Online (Sandbox Code Playgroud)

我找到了BouncyCastle库,并为RSAParameters计算了所有参数.但我无法解密数据.我在方法RSACryptoServiceProvider.ImportParameters中 …

c# rsa gnupg

6
推荐指数
1
解决办法
544
查看次数

如何从P,Q和E计算用于RSA加密的D.

我试图找到D使用P,QE(Dp,Dq和可得).(p-1mod q)

根据这个答案这个答案并更新了这个问题用下面的方法,我应该得到D.

为了测试这一点,我生成了密钥对,并尝试从现有组件中计算组件,并将结果与​​原件进行比较.所有结果都很好,除了D.我从上面的答案中复制了我的计算错误.如果有人能告诉我我做错了什么会很棒.

测试代码

using System;
using System.Numerics;
using System.Security.Cryptography;
using System.Text;

class Program {

    static RSAParameters key = new RSAParameters() {
        P = new byte[]{
                0xDE, 0xA6, 0x35, 0x0B, 0x0A, 0xA5, 0xD7, 0xA0, 0x5C, 0x49, 0xEA, 0xD1, 0x3F, 0xA6, 0xF5, 0x12, 
                0x19, 0x06, 0x25, 0x8A, 0xD9, 0xA7, 0x07, 0xE7, 0x0D, 0x8A, 0x7C, 0xB1, …
Run Code Online (Sandbox Code Playgroud)

.net c# rsa chinese-remainder-theorem

5
推荐指数
1
解决办法
5187
查看次数