这个话题已经讨论了很多,但是我认为这是对我们的用户重申的重要话题。
编码不是加密!
加密是特定的编码子集,其中编码的消息只能由授权方(持有解密密钥的方)访问。
编码只是一种以特定格式表示数据的方式。 例如,我们可以使用ASCII格式对原始二进制数据进行编码,以可视方式显示英文文本。
![](https://i-blog.csdnimg.cn/blog_migrate/577ae3846e070e3e7e7cc5fee7490636.png)
在编程的上下文中,纯编码方案绝对不提供安全性。 有时,像JWT或Base64输出之类的格式可能会使入门级程序员感到困惑,因为它们看起来像是加密的…… 不是! 编码格式仅是有用的,因为它们使计算机和人类协议可以有意义的方式查看和处理原始二进制数据。
为了说明这一点,请尝试使用以下工具来查看解码刚刚编码(未加密)的消息有多么容易:
强制性XKCD
![](https://i-blog.csdnimg.cn/blog_migrate/ff653a0170d95e367f3da280f48ed39b.png)
讲故事的时间
在我过去工作过的工作中,一位在我之前的开发人员建立了自己的编码方案。 它将获取消息中包含的原始二进制数据,并将特定的字节序列映射到某些字符。 它完全构成了,他在代码上留下的评论是:
// Obfuscation technique. Base53 encoding for security
尽管这种混淆可能会使攻击者迷惑几分钟, 但从不必要的复杂性来看,这种混淆提供了比安全性好处更多的潜在错误。 借助所有主要编程语言中都可用的免费易用的加密库,这些天来没有任何借口尝试自行编写。
在上述情况下,应使用ECC,RSA,AES-256或其他安全算法。 具有讽刺意味的是,它可能也将花费更少的时间来实施。
安全可能很难。 但是,请花一些时间使用最佳实践。 从长远来看,它将为您节省大量时间和头痛。 祝你好运,并在那里安全!
莱恩·瓦格纳@wagslane
先前发布在https://qvault.io/2019/08/14/stop-with-the-obfuscation-encoding-and-encryption-are-not-the-same/
From: https://hackernoon.com/stop-with-the-obfuscation-encoding-and-encryption-are-not-the-same-xd8m3yrh