2011-05-07 31 views
1

的密碼簽名,我需要簽訂QR code,我嘗試使用一些標準的.NET代碼創建一個加密簽名:創建小於1024個比特

var privateKey = (RSACryptoServiceProvider) certificate.PrivateKey; 
var data = Encoding.UTF8.GetBytes(payload); 
var signature = privateKey.SignData(data, new SHA1Managed()); 

這工作,但簽名是1024位長 - 太非常適合我想要創建的QR碼。

有誰知道是否有可能生成較短的簽名,例如: 512位?

或者,是否有簽署QR碼的標準?

+0

是否有原因阻止您使用DSA而不是RSA? – Accipitridae 2011-07-06 06:54:27

+0

我只需要在QR碼上簽名,這樣它就不會被僞造。任何產生足夠短散列並且被廣泛實現的簽名算法,包括.Net在內,都可以。 – 2011-07-09 15:18:33

回答

1

簽名的長度與您使用的密鑰的模數相同。如果您在創建證書時未指定模數,它將默認爲1024位。您可以將長度更改爲512,然後生成的簽名將是512位。

要在創建證書時更改模數,請使用RSAParameters結構。

+0

這是一個2048位密鑰,但簽名是1024位 - 長度不一樣。 – 2011-05-07 01:42:06

+0

是的,我的壞...這是模數不是關鍵...改變了我的答案... – 2011-05-07 01:52:25

+1

請注意,只是放棄密鑰大小可能是一個壞主意; [12位RSA密鑰在12年前被分解](https://blog.perfect-privacy.com/2010/01/09/rsa-768-bit-key-broken-after-2½-years-of-brute -force-理/)。 – sarnold 2011-05-07 01:53:57