Javascript 为什么atob和btoa不可逆

Javascript 为什么atob和btoa不可逆,javascript,encoding,Javascript,Encoding,我正试图找到一种简单的方法来记录和暂时混淆我用Markdown写的“测验”问题的答案。(在演示过程中,我会告诉学生测验的答案,因此我不会寻找任何类型的安全加密。) 我想我可以使用atob(“我想混淆的消息”)然后告诉学生,他们可以在开发人员工具面板中使用btoa()来逆转这个过程。但是,以下内容不返回“一”: btoa( atob('one') ) 有人知道为什么它不返回“一”?JavaScript中是否有其他方法允许对消息进行松散加密和解密?(我的工作对象是绝对初学者,他们可能会被函数弄糊涂

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

我想我可以使用
atob(“我想混淆的消息”)
然后告诉学生,他们可以在开发人员工具面板中使用
btoa()
来逆转这个过程。但是,以下内容不返回“一”:

btoa( atob('one') )

有人知道为什么它不返回“一”?JavaScript中是否有其他方法允许对消息进行松散加密和解密?(我的工作对象是绝对初学者,他们可能会被函数弄糊涂,并且在尝试向页面添加库时会非常困惑)。

正如@george所指出的,在使用
atob()之前必须先使用
btoa()

这就是原因

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

var string1=“一”,
string2=“one2”;
console.log(“string1的值”,string1)
console.log(“解码字符串1”,atob(字符串1))
log(“编码的string1”,btoa(atob(string1)))
console.log(“-----------------------------------------”)
console.log(“string2的值”,string2)
console.log(“解码的string2”,atob(string2))

log(“编码的string2”,btoa(atob(string2)))
这不是错误的方法吗?aka
atob(btoa(“one”))
听起来不错,非常感谢@乔治仍然很有趣,因为它不起作用。是的,我同意。值得注意的是,这个空间是非欧几里得空间。我取消了这个,因为我自己可能会在几年内用谷歌搜索这个。。。
atob( btoa( 'hello' ) )