2017-08-01 58 views
0

我想问一下关于C#上RSA登录的问题。带有自己的十六进制编码的RSA参数的签名文档

我有一个文件的标志。我有模数,私人指数和公开指数的纯十六进制值。我不想用随机生成的密钥进行签名。当我用标志工具尝试标志时,我已经完美地获得了结果。但是我不能用C#来完成。我是这类问题的新手。所以我非常困惑。

我看了很多网站和arcticles,但我找不到任何解决方案。也许有,但我无法得到它,我不知道。

如果你能向我详细解释(步骤),我会很感激。

回答

0

在.NET中,你需要私钥的全套CRT参数,所以如果你有D,你还需要P,Q,DP,DQ和InverseQ。

RSAParameters rsaParams = new RSAParameters(); 
rsaParams.Modulus = ParseHex(modulus); 
rsaParams.Exponent = ParseHex(exponent); 
rsaParams.D = ParseHex(d, rsaParams.Modulus.Length); 
rsaParams.P = ParseHex(p, (rsaParams.Modulus.Length + 1)/2); 
rsaParams.Q = ParseHex(q, rsaParams.P.Length); 
rsaParams.DP = ParseHex(dp, rsaParams.P.Length); 
rsaParams.DQ = ParseHex(dq, rsaParams.P.Length); 
rsaParams.InverseQ = ParseHex(inverseQ, rsaParams.P.Length); 

RSA rsa = RSA.Create(); 
rsa.ImportParameters(rsaParams); 

ParseHex(string str, int len=-1)是解析十六进制字符串为固定长度阵列的例行程序(如果该十六进制字符串短,在阵列应留有填充用0字节值)。