数字签名的作用是我对某一份数据打个标记,表示我认可了这份数据(签了个名),然后我发送给其他人,其他人可以知道这份数据是经过我认证的,数据没有被篡改过。
服务端:
1、首先用一种算法,算出原始数据的摘要。需满足 a.若原始数据有任何变化,计算出来的摘要值都会变化。 b.摘要要够短。这里最常用的算法是MD5。
2、生成一份非对称加密的公钥和私钥,私钥我自己拿着,公钥公布出去。
3、对一份数据,算出摘要后,用私钥加密这个摘要,得到一份加密后的数据,称为原始数据的签名。把它跟原始数据一起发送给用户。
用户:
4、用户收到数据和签名后,用公钥解密得到摘要。同时用户用同样的算法计算原始数据的摘要,对比这里计算出来的摘要和用公钥解密签名得到的摘要是否相等,若相等则表示这份数据中途没有被篡改过,因为如果篡改过,摘要会变化。
常用的摘要算法:
【MD5码】:信息摘要算法,摘要长度为128位
【SHA】(安全散列算法):SHA-1算法摘要信息长度为160 位,比MD5更慢,但是更安全
【MAC算法】:带有密码信息的信息摘要算法,是对MD和SHA算法的演变和改进
【十六进制编码】
【Base64编码】