• 欢迎访问佰阅部落,本站为优质开源程序分享站,所有自研项目均开源免费,可在Github查看源码。 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 欢迎积极参与讨论、反馈问题

Golang笔记:细数实际场景下5种常用的加密方法

经验教程 佰阅部落 2周前 (06-01) 158次浏览
文章目录[隐藏]

接触Golang编程语言有一段时间了,从已上手的几个WEB程序和小工具而言,go语言逐渐成为我心中最爱的编程语言。最近开发的一个商用程序里,需要处理一些加密内容,本篇就来详细总结下有关加密的一些知识。内容听取了评测视频及解说,然后根据自己实际接触的场景进行整理,淘汰过时或不安全的,直接以实际应用场景为题。

0. 以校验为目的哈希值


哈希值有什么用?常见于哪些场景呢?以常见的MD5加密为例,我们常见的很多API接口(比如KMFAKA程序里集成的各种支付接口,几乎90%的接口都用MD5进行校验),请求时,都会把各种参数排序组合,然后计算md5值并传递给服务器,服务器再以同样的方式进行验证,以校验数据是否被篡改。还有阿里云盘上传时会将文件分割并计算校验码,如果计算的校验码已存在云端,则该文件为秒传。

实际商用程序中,我们会在普通访客写入数据库的步骤上,会加一个校验,配合前端混淆的js加密,不仅可以防止数据被篡改,还可以防止仅通过API进行的恶意写入。以SHA1为例,

为防止破解,一般我们还会加盐处理,可用随机字符串或时间盐,这些参数是需要一并传递的。由于是字符串加密,还可以自我排序,外加几个固定参数以提高安全性。

1. 以加密解密为目的加密方法

A. 简易的明文编码(Base64)

此类方法一般具有降低可读性和压缩代码的作用,比如Ascii、GBK、Unicode、Base64等编码,其中Base64几乎出现在每个加密程序里,简单来讲,Base64就是一种用64个Ascii字符来表示任意二进制数据的方法。主要用于将不可打印的字符转换成可打印字符,或者简单的说将二进制数据编码成Ascii字符。比如go语言中经常遇到的一些二进制内容,实际打印后效果为乱码,假如该数据要写入到数据库,可行吗?

同样的,Base64还组合在JWT认证服务上,可以说是明文密码最直接的最常用的加密方式。

B. 密钥解密类(AES-GCM)

此类方法需要加密和解密共用一把钥匙才能处理数据,以AES加密为主,经历数次技术发展,其中又以AES-GCM为主流,它是一种能够同时保证数据的保密性、 完整性和真实性的一种加密模式。我在个人项目中,对关键信息都采用这种方法进行加密。由于数据库里存储的是加密后的数据,就算黑客拿到你的数据库,也无法破解加密后的内容。虽然加密操作很大程度上阻碍了我们快速观察数据,但是为了以防万一,加密存储是必须的。至于观察数据,则可以从其他维度进行判定后再解密。

比如我最近写的商用发卡系统,敏感信息均作了加密处理,这种信息传递,如果是Python开发,可能会拖慢速度,但是golang这边完全不是问题。在实际测试中,20条长加密信息处理消耗都是按微秒计算的,非常令人满意。

C. 公钥和私钥(RSA256)

这是一种非对称加密算法,两把钥匙相互加解密,简单而言就是,如果私钥加密->需公钥解密、如果公钥加密->需私钥解密。一般公钥是公开的,让用户使用公钥加密信息,然后所有数据仅持有私钥者才能解密,适合安全性最高的场景。

比如存储一些公民身份信息的内容等。

2. 使用场景总结

速度上:明文编码 > MD5 > SHA1 > AES-GCM > RSA
综合而言,校验用SHA,普通编码用Base64,内部数据加密存储可用AES-GCM, 最高安全直接用RSA。
另外,一些敏感信息展示,还可以使用脱敏处理,比如姓名、身份证号、手机号脱敏处理等,可在后台搭配AES方法脱敏处理。

3. 一些使用感受

很多算法早在1992年左右就诞生了,时至今日,比较出名的算法少之又少,看来密码学领域不是花样繁多的一门学问,抛开背后的各种数学原理,现实需求就是从效率、安全方面评定的,其他因素都是次要的。很多时候,密码学都是等现有的不安全之后,再去尝试新的,比如sha256这类的算由于密码学专家的存疑,sha3直接换算法思路了。信息安全方面,我们始终要保持一种超前的预判,该加密的必须加密,该脱敏处理的必须脱敏处理,唯有如此,才能在互联网上保障信息的绝对安全。


佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Golang笔记:细数实际场景下5种常用的加密方法
赞一下 (0)
佰阅部落
关于作者:
爱折腾,爱学习,用心分享各种实用搭建教程,让优质web程序脱颖而出,欢迎订阅!