Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are atob and btoa not reversible

I'm trying to find a simple way to record and temporarily obfuscate answers to "quiz" questions I'm writing in Markdown. (I'll tell the students the quiz answers during the presentation, so I'm not looking for any kind of secure encryption.)

I thought I could use atob('message I want to obfuscate') then tell students they can use btoa() in their developer tools panel to reverse the process. However the following does not return 'one':

btoa( atob('one') )

Does anyone know why this doesn't return 'one'? Are there other methods built into JavaScript that will allow one to loosely encrypt and decrypt a message? (I'm working with absolute beginners who might be confused by functions and who would be very confused trying to add libraries to a page).

like image 707
duhaime Avatar asked Nov 22 '17 15:11

duhaime


2 Answers

That is the reason.

In Base64 encoding, the length of output encoded String must be a multiple of 3. If it's not, the output will be padded with additional pad characters (=). On decoding, these extra padding characters will be discarded.

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)))
like image 146
David Avatar answered Sep 23 '22 13:09

David


As @george pointed out, one must use btoa() before using atob():

atob( btoa( 'hello' ) )
like image 44
duhaime Avatar answered Sep 23 '22 13:09

duhaime