各种签名(signature)和校验
签名的概念
目的: 为了确认某个信息确实是由某个发送方发送的,或者某个发布内容确实是由发送方发布的,任何人都不可能伪造消息,并且,发送方也不能抵赖。
方法: 对发布的信息内容,通过某种可靠的加工(比如进行MD5运算),生成签名标识(字符串序列或者证书之类)
验证: 任何人拿到发布的信息内容后,可以通过同样的加工,得出签名标识,如果比对和发布者公布的签名一致,则验证为真。
签名与加密区别: 加密是为了不让别人知道原来的信息,签名是为了保证大家获取到的原来的信息是没有经过改动的。
签名算法
1、MD5
- 对字符串或者文件进行MD5运算得出MD5值,把原文和MD5序列一起公布,如果有人修改原文,经过MD5比对就会发现。
- Linux命令计算MD5:
echo -n 字符串| md5sum
md5sum 文件
2、SHA256
- 对字符串或者文件进行SHA256运算得出SHA256值,把原文和SHA256序列一起公布,如果有人修改原文,经过SHA256比对就会发现。
- Linux命令计算SHA256:
echo -n 字符串| sha256sum
sha256sum文件
- 比如
3、MD5withRSA或SHA1withRSA或SHA256withRSA
- 使用RSA非对称的公钥私钥,通过RSA私钥对发布内容签名得到签名Signature,把发布内容、签名和公钥一起公布。
- 公众拿到发布内容,通过公钥对发布内容进行验证,看是否符合签名。
- java获取SHA256withRSA签名类实例:
Signature signature = Signature.getInstance("SHA256withRSA");
4、GPG
- 比如想下个开源的文件:
- 看到它提供了一个asc签名文件:https://downloads.apache.org/kafka/2.5.0/kafka_2.12-2.5.0.tgz.asc
- asc是PGP生成的签名
- 安装PGP校验工具:https://www.gnupg.org/download/,下载exe文件后使用提供的sha256先验证完整性。
- 或者Linux安装,使用命令校验asc签名。