June 26, 2015 at 5:40 PM #296933
I created a tool to output answers from _tobj9303.xml for SME to review answers quickly. I upgraded to Letora 12 and found the answers are encrypted.
For example: C. $100 becomes: s1vEx9v4t3vCt0t0t0x9rCp2
Does anyone know or if Trivantis can provide the conversion table to decrypt the text in XML?
Thanks,June 26, 2015 at 6:01 PM #296934
It looks like too complex to decrypt. I will use version 11 to generate the file first then change it to 12 as a final. Is there a place I can disable the encryption on answers temporarily?
I like the encryption feature. It will be hard for a student to cheat.June 27, 2015 at 5:49 AM #296940
Hey @cpliu, the code is not very hard. Every character is encoded with two characters, e.g. “A” is encoded as “s1” and “5” is encoded as “t5”. So “A5” would be encoded as “s1t5”. List of codes:
ABCDEFGHIJKLMNOPQRSTUVQXYZ = s1s2s3s4s5s6s7s8s9sAsBsCsDsEsFr0r1r2r3r4r5r6r1r8r9rA
abcdefghijklmnopqrstuvwxyz = q1q2q3q4q5q6q7q8q9qAqBqCqDqEqFp0p1p2p3p4p5p6p7p8p9pA
0123456789 = t0t1t2t3t4t5t6t7t8t9
delimiter = vC
So e.g. “One” is “sFqEq5”
and “One|Two” (in a multiple choice question) is “sFqEq5vCr4p7qF”
So all you need is to build a simple function in your tool that reads encoded characters in pairs and matches them to real characters. Of course, it only covers 62 characters above 🙁 I strongly feel that this is a simple shift code but I need a bit more time to figure it out so that any Unicode character can be decoded.This post has received 1 vote up.June 27, 2015 at 6:25 AM #296941
Okay, I got it. Someone in Trivantis has obviously been a scout, because the algorithm is partly based on scouts’ reversed alphabet cypher 🙂
To decode, say, “sE” into an actual character, you need to take the first letter (s), find its position in the alphabet (18 since we start with 0) and calculate its position in the reversed alphabet that starts with “wvutsrqp…” (26-3-1-18 = 4, note that we start with 0). Then you simply add the other character (E) and get “4E”. 4E is a Unicode (hex) code for “N”. Yay, we decoded “sE” into “N”, which is the correct answer.
Let’s try with “vC”. “v” is “1”, and “1C” is “file separator character”. Looks like its working.
Now anything that starts with “z” or “Z” is a special case and works a bit different (simpler). To decode “z170”, you simply ignore the “z”, and look for “170” (hex) in Unicode. It’s “Ű”, by the way.
Voila, I think its cracked 🙂
UPDATE. I wrote a simple decoder for you: http://jsfiddle.net/vhqb6oy5/ – it does not decode some very complex characters like Arabic or Chinese but it works for characters upto U+016F (see this table – http://unicode-table.com/en/) and that’s quite a lot.This post has received 1 vote up.June 30, 2015 at 10:37 AM #297057
Sergey, you’re the hero. Thanks for the explanation. I originally thought it took the whole text into consideration when decoding it back. I tried your decoder, it worked except symbols (e.g. $, comma) and space get ignored. It’s still very helpful.
Thanks!June 30, 2015 at 11:42 AM #297064
I’ve updated it so it recognizes space and the following symbols: !”#$%&'()*+,-./
Try it here: http://jsfiddle.net/cafwt1g1/
P.S. You know why it didn’t work? Because I used “wvutsrq…” as reversed alphabet string yet Lectora uses “”wuvtsrq…” 🙂This post has received 2 votes up.July 1, 2015 at 11:30 AM #297130
Thank you. I should be able to adjust my tool to show the right answer. I will post if I have questions on how it works.
You must be logged in to reply to this topic.