RSA加密:参数不正确

时间:2018-08-15 12:16:15

标签: c# .net cryptography

我正在使用https://csrc.nist.gov/Projects/Cryptographic-Algorithm-Validation-Program/Component-Testing#RSADP中的测试向量(RSADP解密操作原始组件测试向量)

公钥信息和消息(RSADPComponent800_56B.txt):

n = d0b750c8554b64c7a9d34d068e020fb52fea1b39c47971a359f0eec5da0437ea3fc94597d8dbff5444f6ce5a3293ac89b1eebb3f712b3ad6a06386e6401985e19898715b1ea32ac03456fe1796d31ed4af389f4f675c23c421a125491e740fdac4322ec2d46ec945ddc349227b492191c9049145fb2f8c2998c486a840eac4d3
e = 859e499b8a186c8ee6196954170eb8068593f0d764150a6d2e5d3fea7d9d0d33ac553eecd5c3f27a310115d283e49377820195c8e67781b6f112a625b14b747fa4cc13d06eba0917246c775f5c732865701ae9349ea8729cde0bbade38204e63359a46e672a8d0a2fd530069
message = 5c7bce723cf4da053e503147242c60678c67e8c22467f0336b6d5c31f14088cb3d6cefb648db132cb32e95092f3d9bcd1cab51e68bd3a892ab359cdff556785ae06708633d39a0618f9d6d70f6bdeb6b777e7dd9acc41f19560c71a68479c8a07b14fb9a4c765fd292ae56dd2f2143b62649cc70fb604fdc5cc1ade6e29de235
d (not necessary) = 27b7119a09edb827c13418c820b522a1ee08de0e4bb28106db6bb91498a3b361ab293af83fefcdd8a6bd2134ca4afacf64a0e33c014f48f47530f8847cc9185cbedec0d9238c8f1d5498f71c7c0cff48dc213421742e34350ca94007753cc0e5a783264cf49ff644ffea94253cfe86859acd2a2276ca4e7215f8ebaa2f188f51

代码:

public void Encrypt()
{
    RSAParameters keyParameters = new RSAParameters();
    keyParameters.Exponent = e; // Convert e from hex to byte[] before
    keyParameters.Modulus = n; // Convert as well
    byte[] data = message; // Convert as well

    RSA rsa = new RSACng();
    rsa.ImportParameters(keyParameters);
    var res = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1)
}

最后一行引发异常

  

参数不正确

hex转换为byte[](出于示例目的的简化版本,已测试):

public byte[] ConvertFromHexToByte(string data)
{
    byte[] byteArray = new byte[data.Length / 2];

    for (int x = 0; x < data.Length; x += 2)
    {
       byteArray[x / 2] = Convert.ToByte(data.Substring(x, 2), 16);
    }

    return byteArray;
 }

我通过使用来自随机RSAParameters对象的RSACng测试了加密代码,它似乎可以正常工作。然后,我尝试使用此答案(https://stackoverflow.com/a/44441955/7343355)导入所有参数(文件还提供d,因此可以计算和导入所有参数),它仍然引发异常。

P.S。忽略填充模式,我还没有弄清楚测试向量中的填充模式,这不是当前的问题

编辑:完整堆栈跟踪

  

NCryptNative.EncryptData [T](SafeNCryptKeyHandle密钥,Byte []数据,T&paddingInfo,AsymmetricPaddingMode paddingMode,NCryptEncryptor`1加密器)

     

NCryptnative.EncryptDataPkcs1(SafeNCryptKeyHandle密钥,Byte []数据)

     

RSACng.Encrypt(Byte [] data,RSAEncryptionPadding padding)

     

加密d__4.MoveNext()

我调查了NCryptNative.EncryptData,但并没有真正找到可能导致这种情况的原因

0 个答案:

没有答案