从一个需要三个密钥的算法聊聊加解密

2019-04-09 22:51:46 浏览数 (1)

网上瞎逛逛到一个 des 加解密需要三个密钥的,一开始以为是3des,标准3des加密 使用密钥 k1加密一次,k2解密一次,k3加密一次得到加密结果,但是仔细一看我逛到的那个实现,又好像和标准实现相去甚远,经过一番搜索,我感觉我找到了原贴。

这是一个十多年的古董帖子这是一个十多年的古董帖子

原始作者 id guapo 前辈,帖子标题为学习了 des 算法之后实现的 javascript 版本,其实另外还有一个 java 版的。十多年前可能还没什么人做这一款加密算法的标准实现,所以 guapo 同学在学习了des 算法之后实现了 java 和 javascript 可以互通的加解密版本。这个算法应该是后来被各种复制到其他使用场景中,例如这里。

这个代码可能在当时属于开天辟地的作品,放到今天来看……简直想打人(JS 版),实现代码层次极深,代码重复情况相当恶劣,大体结构上你大概从现代的代码编辑器的导航器里面就看出了端倪。

可怕的嵌套和结构性重复可怕的嵌套和结构性重复

那么在现代主流观点我们会怎么使用加解密呢?我们非常不提倡自行实现加解密算法,尤其是创新性的加解密算法,首先其安全性很难得到保证,其次会在跨系统、编程语言的实现对齐上遇到很大的麻烦。

我们提倡使用标准的加解密算法,例如对称加密的AES ,非对称加密 RSA ;hash 算法方面我们已经不再推荐使用 md5,主流观点推荐使用 SHA。一个可靠的加密算法搭配足够的密钥长度可以保证足够的加密强度。当我们使用标准的加解密算法的时候,各种语言相关的标准加解密实现相对可靠一些。我们只要保证好密钥的安全,基本上没有什么大问题。

现在腾讯云上已经推出了加解密相关的密钥管理服务,提供密钥管理和数据加解密能力,可以了解一下。讲人话基本上是由密钥管理服务 KMS 管理主密钥,用主密钥来生成应用数据密钥,再用数据密钥在业务中加密数据。接口封装比较友好,解密接口甚至都不需要指定主密钥,猜测加密后会有其他元数据索引主密钥的 id。用户可以创建多个主密钥并且区分使用场景,也可以对单个主密钥进行禁用和启用,方便用户可以对密钥的生命周期进行管理。

0 人点赞