搜索签名的方式我已经遇到了一些相当精细的代码示例。但是下面的代码似乎已经足够了。这里有什么东西像盐一样缺少,或者只是签字时不需要盐吗?我不加密,只是签名。
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] data = Encoding.ASCII.GetBytes("hello");
byte[] signature = rsa.SignData(data, "SHA1");
byte[] dataTest = Encoding.ASCII.GetBytes("hello");
bool verified = rsa.VerifyData(dataTest, "SHA1", signature);
if (verified) Text = "True"; else Text = "Untrue";
答案 0 :(得分:13)
签署时是否不需要盐?
如果您的任务是阻止预先计算已知消息的哈希,则哈希是必要的,其中哈希被用作共享密钥。如果那不是你的申请,那就没有必要加盐。
如果您不理解为什么需要盐,请参阅我关于该主题的系列文章:
http://blogs.msdn.com/b/ericlippert/archive/tags/salt/
这里缺少什么东西吗?
是的,缺少最重要的一步。你打算如何传播公钥? 整个系统的安全性依赖于您甚至没有提到过的那一步。
假设Alice希望向Bob发送消息,Bob希望验证它是否来自Alice。他们执行以下操作:
这是对的吗?
否。结论不正确。结论应该是:
如果Bob有其他证据证明他有Alice的公钥,那么原始结论只是正确的。因为Bob可能处于这种情况:
现在整个事情都变成了地狱。 Mallory现在可以发布Bob认为来自Alice的消息,而Alice则不能!
您必须说您将如何安全地发布公钥。整个系统依赖于两件事:私钥保持私密,而有一些机制可以使公钥与其所有者正确关联。