每一个用户都有自己的私钥和公钥,用户的私钥只有用户自己知道,其他任何人都不知道,而用户的公钥任何人都可以知道。
我们知道,私钥加密的内容content,只有对应的公钥能够解开,如果解不开,只有两种可能,内容content变了,或者公钥不对(这个公钥不是加密时使用的对应私钥的公钥),如果能够保证后一种情况不会发生,那就只有前一种情况是内容变了。但是为什么会变?,答案是 内容肯定是伪造的。自己签名的东西反而字节却解不开了。
这个content就是我们说的 数字签名
如果用户A对某一个事情发布了签名,就说明A真的同意了某一件事,因为,签名是通过私钥生成的,私钥只有自己才有。如果说后来,A不承认了这件事,别人,就可以拿着A的公钥去验证一下这个签名,获取它所签名的事件,看看是不是他不承认的事,如果是,他就无法抵赖,不承认也得承认。
签名:signature = encrypt(privateKey, sha256(message)) 私钥加密
验证签名:hash = decrypt(publicKey, signature) 公钥解密
参考
廖雪峰-签名算法