2009-09-08 20 views
1

我不知道如何描述我的问题。这是对字节数组进行加密的最简单方法,并且我在.Encrypt(...)方法中实际得到“Unspecified Error”。使用C#.NET加密数据时未指定的错误RSA

byte[] cleartext = 
{ 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x71, 0x77, 0x65, 0x72, 0x74, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x61, 0x73, 0x64, 0x66, 0x67, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 
}; 

Logger.Hex("Clear test login text", cleartext); 

byte[] ciphered = new RSACryptoServiceProvider(1024).Encrypt(cleartext, false); 

Logger.Hex("Ciphered test login text", ciphered); 

Console.Read(); 

注意:Logger.Hex显示字节数组的十六进制字符串表示形式。没有什么干扰。

回答

3

您正在使用1024位(128字节)的密钥大小和PKCS#1 v1.5填充,并将128个字节的数组传递给Encrypt

MSDN

 
            Maximum Length of rgb Parameter 

Direct Encryption (PKCS#1 v1.5)  Modulus size - 11. (11 bytes is the 
            minimum padding possible.) 

所以,你的1024位密钥太小加密128个字节。你有没有尝试增加密钥大小?

+0

据我所知,我没有使用任何填充(注意加密函数的第二个参数(bool false))。 – Lazlo 2009-09-08 01:14:10

+0

请仔细阅读文档:“fOAEP:** false **使用PKCS#1 v1.5填充。” – dtb 2009-09-08 01:20:56

+1

当。这实在是骗人的。我需要直接加密。 但是: 不支持直接加密和OAEP填充:对称密钥允许的最大大小。 是否有任何我需要的RSA自定义类?这个代码在某种程度上是Java的一个端口,可以支持直接加密。如果我无法直接加密/解密,我真的被卡住了。 – Lazlo 2009-09-08 01:36:39