为什么atob和btoa不可逆转

时间:2017-11-22 15:24:02

标签: javascript encoding

我正试图找到一种简单的方法来记录并暂时模糊我在Markdown写的“测验”问题的答案。 (我会在演示期间告诉学生测验答案,所以我不是在寻找任何类型的安全加密。)

我以为我可以使用btoa()然后告诉学生他们可以在开发者工具面板中使用btoa( atob('one') ) 来反转这个过程。但是以下不会返回'one':

'one'

有谁知道为什么这不会返回matching_words = [] for word in source_of_words: matching_words.append(word) print(matching_words) ?是否有其他内置于JavaScript中的方法可以让人们对消息进行松散加密和解密? (我正在与绝对的初学者合作,他们可能会被功能混淆,并且在尝试向页面添加库时会非常困惑。)

2 个答案:

答案 0 :(得分:2)

这就是原因。

  

在Base64编码中,输出编码String的长度必须为a   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)))

答案 1 :(得分:1)

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

atob( btoa( 'hello' ) )