为什么Atob和Btoa不可逆

duh*_*ime 5 javascript encoding

我正在尝试找到一种简单的方法来记录和暂时混淆我在Markdown中编写的“测验”问题的答案。(在演示过程中,我会告诉学生测验答案,因此,我不需要任何类型的安全加密。)

我以为我可以用atob('message I want to obfuscate')然后告诉学生,他们可以btoa()在开发人员工具面板中使用以逆转该过程。但是,以下内容不会返回“ one”:

btoa( atob('one') )
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么这个不回来'one'?JavaScript中是否还有其他方法可以使您轻松地对消息进行加密和解密?(我与绝对的初学者一起工作,这些初学者可能会对功能感到困惑,并且对将库添加到页面会感到非常困惑)。

Dav*_*vid 3

这就是原因。

在 Base64 编码中,输出编码字符串的长度必须是 3 的倍数。如果不是,输出将用额外的填充字符 ( =) 进行填充。解码时,这些额外的填充字符将被丢弃。

var string1 = "one",
  string2 = "one2";

console.log("Value of string1", string1)
console.log("Decoded string1", atob(string1))
console.log("Encoded string1", btoa(atob(string1)))
console.log("-------------------------------------")
console.log("Value of string2", string2)
console.log("Decoded string2", atob(string2))
console.log("Encoded string2", btoa(atob(string2)))
Run Code Online (Sandbox Code Playgroud)