校验和是如何进行校验的?

我们发现IP、UDP和TCP协议报文头部都有校验和字段,大小都是16bit.

那么这个校验和是如何进行校验的呢?

这里我们简单介绍两种实际使用的校验和算法 crc md5.

1.crc :循环冗余校验

有一串数据,把它当成二进制的数据,依次按照字节为单位,取出数据进行累加.

代码实现类似于:

 

加着加着可能就溢出了,溢出部分就不要了.

传输数据的时候,把数据和算出来的值(crc校验和)也传给接收方. 接收方同时收到了( 数据+crc校验和),这时接收方就需要验证一下啊,看看当前的数据是否是对的,就按照同样的算法再针对得到的数据部分计算一边crc校验和,把新的计算结果和收到的crc校验和进行对比,看结果是否一致.

这个操作本质上就是在发送前和接收后都算一遍crc.

如果发送的和接收的数据内容不变,得到的crc结果也就是一致的.

如果传输过程中出现了问题(比特翻转)导致数据内容发生改变,此时算出来的2份crc也就大概率不相同(有一丢丢的概率相同,这个概率很小).

2.md5 算法

md5算法应用的场景非常多,用来作为校验和只是其中的一个场景而已.

 

md5本质上是一个"非对称的哈希算法" .

md5算法的特性:

1.定长: 无论输入的字符串是多长,得到的md5的值都是固定长度.

2.分散: 只要输入的字符串只变化了一点点,得到的md5的值都会差别巨大.(这个性质是作为哈希算法的核心)

3.不可逆: 给定原串很容易得到md5的值,但是给定md5的值,理论上是无法恢复出原始的字符串的.

md5算法常见的使用场景:

1.作为hash算法.

2.作为校验和.  (很多场景,传输大文件,都会使用md5作为校验和算法,因为md5的分散的特性,数据只要发生了一丢丢的改变,得到的md5的值都差很多.两个字符串md5的值一致的概率非常低,比crc 中相同的概率要低很多)

3.应用于一些密码学场景...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值