Base64是加密算法还是编码算法?

Is Base64 an encryption or encoding algorithm?

我必须使用使用 Base64 的加密算法,但是当我在网上搜索时,我发现论坛说它是一种编码算法。这让我很困惑。 :(

Base64是加密算法还是编码算法?我们如何区分这两者,除了一个是可公开破译的而另一个需要密钥的事实?

这是一种编码算法(因此 "Base64 encoding")允许人们在 ASCII 友好环境中移动数据(即没有控制字符或任何东西 non-printable)。它应该给你很好的便携性 XML 和 JSON 等等

编码完全为人所知,算法简单,没有"mutability"算法或密钥等概念,因此不被视为"encryption"。

总而言之,任何人都可以使用 Base64 解码您的内容,因此它不是加密。至少不能用作加密。它可能会让一个四岁的孩子难倒,但仅此而已。

编码算法只是以另一种格式呈现数据。它不会以任何方式试图隐藏数据,它只是用另一种语法表达相同的数据。 Base64就是这样一种编码算法。它仅使用 ASCII 字符对任意数据进行编码,这在许多可能无法正确处理非 ASCII 字符的情况下很有用。你可以整天来回编码和解码Base64;没有秘密,没有保护,没有加密

当然可以将 Base64 视为具有 pre-set/fixed 密钥的替代密码,它也会将密文放大大约 4/3,但这不是一个非常有用的思考过程。它的主要 属性 是它将一些数据转换为另一种格式而无需一些附加信息。所以是一种编码算法。

请注意,Base64 有不同的变体,具有不同的字母表,例如 URL-安全的变体(table 2 of the RFC4648)。如果能给字母表加上位置,那就是加密算法了,但不应该再叫Base64了

编码和加密的区别在于您是否需要知道秘密才能恢复原始形式。 base64 是一种编码,因为您只需要知道 encode/decode 的算法即可。

当某些东西被加密时,会使用一个秘密密钥,您需要知道密钥才能对其进行解密。有两种通用的加密类型:

  • symmetric encryption = 加密和解密使用相同的密钥。使用这种加密的通信者都需要知道这个密钥。
  • 非对称 加密 = 使用不同的密钥来加密和解密。这也称为 public 密钥加密,因为您可以使其中一个密钥广为人知 (public),同时将另一个密钥保密(私有)。这允许任何人使用 public 密钥加密消息,而只有知道私钥的人才能解密,反之亦然。