如何将密钥传递给对方

更新时间:01-21 教程 由 凉堇年♀ 分享

如何将密钥传递给对方?

这个问题有点专业性,刚好我项目中这两种加密技术都使用过,对这两种加密方式有一定的理解。

可能有些小伙伴还不太清楚这两种加密方法,那在回答问题前,我们先搞懂清楚是对称加密和非对称加密。

对称加密

通常是采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

对称加密对内容的加解密需要使用相同的算法,对称加密速度快,一般用于消息发送方数据量比较大时使用。

所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥。

非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。

公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

公钥与私钥是不相同的,并且只能公钥加密,私钥解密,所以称为非对称加密。

非对称加密算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了,这样安全性就大了很多。

非对称加密算法核心就是质因数分解,大家感兴趣可以去搜索李永乐老师的讲解视频。

对称加密算法的使用

对称加密算法加密速度快,非常适合对安全性要求不高的数据,而且支持大量数据一次性加密。

我们是在APP开发的,会从后台服务器获取数据,在这个数据传输的过程中会存在加密操作。

下面先介绍下对称加密算法在代码中的表现形式。

我是采用Java编程的,java里面已经封装好了对称加密代码库,所以我们直接调用就可以实现对称加密。

如图,SecretKeySpec类主要是负责密钥的实现算法,比如有AES、DES等算法,那我们一般使用AES算法。

Cipher类是负责具体的加解密工作,只需把密钥加密算法和加密内容传入,就能获得加解密好的字节数组。

在项目中,一般是用于对安全性不高,但数据量较大的接口做对称加密处理。我之前做过一个B端项目,里面有个业务中心需要获取大量的业务数据,那这个数据用的就是对称加密。

我还做过一个银行项目,里面除了登陆和修改密码的接口,其他的接口全用的对称加密。

非对称加密算法的使用

通过X509EncodedKeySpec类获取标准的公钥,X509是密码学里公钥证书的格式标准,这里获取的公钥就是按照 X.509 标准进行编码的密钥的字节数组。

通过KeyFactory类获取加密算法类型,一般是RSA。

然后再用Cipher类进行加密。

非对称加密由于算法复杂,所以加密速度相对较慢,而且RSA算法只能支持加密128bit数据,其中还包括padding的11bit,所以实际上只能加密117bit的数据。

在APP端项目中,一般是针对安全性要求高,而且数据量小的接口。比如项目中的的登陆,涉及到账户密码的传输,可以用非对称加密。

对称加密时,如何将密钥传递给对方

直接通过网络传递,比如微信直接传递,这种方案一般是同一公司内部人员进行数据传递时使用,此种方案密钥泄漏的风险极高。

通过物理方式传递,比如银行的U盾,使用时插入U盾,读取里面的密钥,进行数据加解密传输,这种方案相对比较稳妥,物理方式存储密钥,一般不容易泄露,除非U盾丢失。通过第三方分发密钥,A和B在在加解密通信前,先各自到第三方获取密钥。这种方案最为稳妥,双方都不知道实际密钥,而且下一次通信时密钥会重新获取。通过非对称加密方式对密钥进行加密传输,这种方式也不错,我项目里面也有使用这种方案,通常是针对动态密钥的接口。如果用非对称加密,加密时间过长怎么解决?

可以将加密内容截取,分段进行加解密。可以在加密前进行字符串长度判断,如果加密内容超过了117bit,就对半截取,依次下去。然后解密方在进行拼接显示。此种方案实现比较简单,但需要双方实现此逻辑。

可以将内容打包生成MD5值,然后将MD5值加密传递,解密方通过MD5值校验文件的真实性与正确性。此种方案虽然能解决加密时间过长问题,但是无法保护文件,一旦被抓包获取,就直接能看到内容,所以对网络安全没有绝对把握的话,不要使用此种方案。总结

对称加密和非对称加密应用在生活的方方面面,比如我国古代的虎符,只有两半合成时才能调兵遣将,这也是对称加密的体现,今天我们以IT领域举例说明,在密钥传输中如何保证密钥的安全性,也给出了非对称加密时间过长的解决办法,但需要结合使用场景去选择解决方案。

在人性浮躁的社会,人人都缺乏安全感,加密显得格外重要!

我是非著名攻城狮,希望我的回答对你有用,感谢您的阅读与支持!

声明:关于《如何将密钥传递给对方》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2315140.html