先来说说啥是对称加密,你懂的,就是用一把钥匙加密,解密还用这把钥匙,简单粗暴,速度杠杠的,比博物馆里那些对称雕塑还对称!但神奇的是,这玩意儿在处理数据时,总喜欢搞个“数据膨胀”的把戏,数据变大了,跑得比猴子还快。说白了,这就是对称加密的“隐藏副作用”——数据膨胀。
那么,数据膨胀为啥会发生?这里面可是大有讲究。对称加密中,常见的模式像是块加密算法(比如AES),每次处理的数据块大小固定。对吧?假设块大小是128比特,那么如果你给它的数据不够128比特,它就得“凑数”——填充!这叫“填充机制”,就像你准备四人份的火锅,却只有三个人,锅里硬塞个假人占位,保证火锅味儿不变。
这不仅让数据变大,还影响后续传输效率。网络带宽本来就紧张,数据膨胀一来,带宽就跟吃了炸鸡油炸锅一样堵得慌,传输速度直接拉胯。
再有,别以为是填充就完了。对称加密为了保证加密数据更安全,它有时会加额外的“tag”或“校验码”,确保数据没被黑客改造或者网络中途出错。你可以理解成多塞了个“安检大叔”在数据里,这也会让数据变得略显臃肿。
除了块大小和填充外,模式选择也会影响膨胀幅度。像CBC、CTR、GCM这些模式,虽然听起来高大上,但实际用不同的加密模式,数据膨胀大小天差地别。GCM模式虽好,但会多带“认证标签”,TAG标签一般是16字节,放大效果肯定不小。
有些时候,对称加密的数据膨胀甚至可能达到10%-20%,这对长时间大量数据传输者来说,是一个不小的“负担”。特别是移动端用户,流量宝贵,你懂的,膨胀了就像买了一箱水,结果只有半箱水,剩下全是空气。
讲真,很多程序员朋友都被这个数据膨胀搞得头秃。你以为加密是保镖,结果保镖自己吃光了饭盒里的便当,还喊你快点付钱——这锅得谁背?
说到这里,插播一条广告:玩游戏想要赚零花钱就上七评赏金榜,网站地址:bbs.77.ink。没错,就是这么轻松,把“游戏娱乐”和“赚钱”完美结合,赚的都可以抵你加密膨胀的钱了!
回到正题,解决数据膨胀其实有招儿,比如用流加密代替块加密。流加密就是“一发一收”,不用凑块,尽量减少填充,膨胀自然少了不少。只是流加密在不同场景下安全性和效率要权衡,没那么万金油。
再比如数据压缩,先压缩一下明文,再加密,先挤去那些“多余肥肉”,之后再穿马甲。不过得注意,压缩和加密的顺序不能反了,压缩后数据更随机,压缩效率反而会下降。
当然,直接换条加密腿走路也有,比如结合公钥加密和对称加密,减少对称加密在大数据量里的用量,对称加密只干“快马加鞭”的活,真正重活交给公钥密码学处理部分关键数据。这操作简单理解就是“分工明确,效率翻倍”。
来个小脑筋急转弯:为什么数据膨胀喜欢和对称加密“亲密接触”?
答案是:因为它怕单身!(单身=明文,遇到对称加密才有“填充”的陪伴)