2017-08-28 29 views
2

我是密碼學的新手,所以也許我對這裏會發生什麼感到困惑。我從一個32字節的消息摘要開始,並嘗試使用我的私鑰對其進行簽名。 RSA.SignHash的輸出是128字節。我期待着32RSACryptoServiceProvider.SignHash與SHA256返回128字節而不是32?

static private byte[] RSAHashAndSignData(byte[] data, RSAParameters privateKey) 
    { 
     byte[] signedHash; 
     //Create a new instance of RSACryptoServiceProvider. 
     using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) 
     { 
      //Import the public key 
      RSA.ImportParameters(privateKey); 

      //Encrypt the passed byte array 
      var sha = SHA256Managed.Create(); 
      var digest = sha.ComputeHash(data); 
      signedHash = RSA.SignHash(digest, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); 
     } 

     return signedHash; 
    } 

回答

4

我期待32

這是一個不正確的假設。簽名不會產生與輸入大小相等的大小。

使用PKCS#1填充,使用1024位RSA密鑰將生成128字節簽名。簽名的大小與簽名密鑰的模數的大小有關。

+0

謝謝,這使得噸感。 –

+1

準確地說,簽名的大小與字節的模數完全相同,不管填充如何(除了可能用於教科書RSA,其中輸出是小於模數的數字,而不是八位字符串)。根據定義,模數與RSA的密鑰大小相同。 –

+0

如果您有選擇,也請使用RSA-2048或更高版本。行業已經從1024位密鑰轉移。 – vcsjones

相關問題