Identify the Killers (Decoding Question)

Ok people, here's the newest encoded text-blocks.  The first one is the same as the first image I've posted in this question http://www.experts-exchange.com/Miscellaneous/Puzzles_Riddles/Q_21314301.html:

qg{jqsg%{qO\_e{|Pft{qt***_{#qt5{q__kz8{a{q^+99W#Y4WWW00+3y+W6RR*4E47)e*E%e*tt~{b
q@lq~xq!'q^q^;zb>q`lMMMq5Vxq`:/VXxq2:qkqzq8a{q6===6R*$^^&{<q`qWnj32j<{qOn_W+8{"{
q^`&-{"{qt736Et-k{g%{q80^^R)j6j-j8j^R7=$Y9W)=3Rk{g%q8g8{qet7-55r0=44uu88-{Q{qR7=
^utQw`~{\q#q7h8q3?wq%<gzgZgWq)/Ig6qvq0fqzqJq@?()g"{q$t_9=7y2{v.Bml"mVq!Xq2LoSTJ[
F]|Fua[Jokt$)1e^+7*+@9^e$E~{gSL]XF"GJ']KGxaC]Hr8pwy6r&it0O8e=E0o@{qBg~qxg$qMg@q,
q>g2qxq?q,g4qvg%{qx.dpksGi;IkA\kIFs;P"IdsXtw-^Ej9j*j6j_6r&w4y(r0_#sXt{gp{q3^r*+$
$E0W4uu8-%{6{q8-%Etw4`~ew{GhqW35qrM<gzq4q%ugdg_g6qvq=X;Sq|qu()qnq3q^:Bq|,{qH9=7y
!{V?bNq@Zn:MCYK}DRAyhs}Ki\yAp2r&_`(!w0&r#8!(%{g|'Gl[x]'FS"|kFXSc[0E&O=TwE6&Rwp(W
&r_{qCg2q,g`qZg4qxg2qMqBg@qCq/qMg$qBg5{qZ]fo'aHSfUoGS"[doF|kZ8y5R8+WEt_{/{qt;Yuo
{gZ^cqlq?g8q^gHBq.3q0gTEgzgTCqOqzwq*vgRg:7_giqzTqUq]g;&gQg[qha*g"q>qO]Xq$g8q5cqK
gZgz-q^fZn'q0q-gJz9Xg)gfq}.qLgJqTgGqfqpgLq|X|grqDgflgEqAq4gUqbq1q1g^qCqb-qQ\{gd6
rX{}gP_gTgrgJVg#wqOq$PgJg'gQPq.qoqvg6(q9gKq<XGgcgpq>6oqCgPq_qVg5quqKg-gQmq?gFMg=
qWgZq[fg=gog0~q^geg7gHqeOlkgspoquq`"qZgIqVquqpCg]g\q<7qvg}qoR<gyq\"gkXgT?qwq]gEq
.gE]q3qu_kq$q(qwgSgigs\qr{gC\:ua{qLg#gRq[,qU"grzg1[g^q8q-gLsgcqcqhqGgF>gXqKqiDg|
q3AqxSg"qaq0gtgXgaqfqBoq7Z}qzgaqfq]5qig`)[gaqf;:g!gUg2stq)g@PzvK]g_idg:g;Wq-q1&5
g2@gFqCgu,glG4qeD[uqz&g'qp&3-q$AgQq)6oqbqlq\g^r{g8@1l{^Pq!g1qH$qLq5;q"qmq))mqdgL
qYqaVgLq3(qF6qzTgWqC'qcg}qXYDq=Dg60g#q_gHq5q~g*qWq@g4g-OUq0g(go|q|}q(>g%gDmgSbq3
gug(w{q8W^RmQ{5Sg*cgEg[q"dgcgkqBg+q`HugsPg~'qlq]q2g0gZvIg;g1qHWqHg'g$q;qJgk{qUO8
z{5Y/$@g1g~g!qKq5G\g]bq#iSqhA{g\}#l={0g#qXV0Yiq}gRqp]q;0{qpNIktI{g(g0gPqHlC%9g7R
g[!q^q@{gYRHz{qVq|uq3qug'kURFGgkqVqKlgL5g(qR=tgLudDgPoqUgcvg:TgS:q%<LqWgUq5q?cgC
g*g\aghgCO}q%q6qWg!gonqM+qNhgoqf.gdgugZ:tq'%gK<;qWq*qIg4qBq0q3gLgHB/qHqa]qK<gP/[
NRqX\qYg)qJHgaqQgsg^TqIqN([qTq#q'Vgi-@)ZgXgLsbg]q?g[gosq+q@g'g&qT-{ge^*J{:g"qkqx

This one however, is a bit longer and is a different image:

aiexea:>KJ#re}Jo}ea%rrr#e$a%=a#a#aHi5aETea&(YY6)3-66633(=(y7q88%T8=6_%twt%tQQe'a
1Bb'a`Vcararn.KXZnea!!!R@e/,a!ca!z.vMaHi5aETea7999q8%yQQr~e:a5Keax32x~Kei2ea#E(E
e<a&:ata3Cea%R-76&3HzEY&&5yx6x3x8x&5R4(3Y6#9=8HzEeiRear%R388^T499##EE3e0ea5R4&#&
5te:XRa)awO`a0z$aQa~i\idi6a#"Giwaba-pa.aklC!Qisea_*u=3E+eKa2"lvm<a1MB?na@hu[ykOR
}PdHs}g\kQ@6!r$`&%)w(&+8reiz|F}Cd[hDJXHGLjZ]&-^O(q+W_IT=RPE6YreaVi#aCamaXi%eaB"<
n/ei$a.a,i1a>i4eaZU|[LpdoD]OG\F;DSHfLo:M%^3&6x9xrx6x#7^t%9$u&3)+:M%ei+ea-&^r$((6
T69##E3*e9eaE3*6&%9e:Xa^atYOa640a*;a~i\a-aQPiKiuiwaba9a~mhaha(!Qi`a=aWVNak:eaJ=3
E+e;a@XKBV>a2a!la~ptjI]{|PG|{fJjth5~W#7^*%q*^_EW~QeifAZ\h]HS};flZkh'HCU7+6p9^=Er
UW+ypO^IeaNavi4eac<Z.bXei!aNi~i4a?a<i@a.i%eaKosU:[IAFgKfsj:;IlHei%eaE(85E$E6&#e.
a%aja@ba;i&saka\aS0iPiL&aQa`abi9oisa"&a*?a=icaBa&i;acaoafW:ata}2aUiAa\EicSiDdiGH
i#ltpNaM]1iFi@G`o?waIkiDi5]eaDYh2ocezah^eiHk^`eMidaUaZi:|LaK9u'hy[irirea91u%e2aN
aG&mi}$agi5iHl}*i]a6#iza]aLQKIa9a=iIipaji4i;aKaEi8dp&i7a.gaCIiYi@d7aQi;iUiga9_iY
ij.araMiIeaChL?eda;Qoi;saC'iCdi&iy/i;oa+1Pi*OiEi^i!a@yabiXaQFOki")Ra]>iqa{<Fa1]l
aAata(,eaX~BGreiZ1QigKaEa-aS|k.ikiPa'6hqi(a.a?i+i=ZigaEaOa8i@eapmJJueioaAiABi%i)
i8a1a]/fdi$aEiGi#a#a#4ikiYi[5igda6fi`a6iq?iS/i9awaba'vasaZi!iR3ioi#amw_vi`aC\zil
$a_LawijWa8?ea,5$0eQ4M1i9ayPiFa1Ai+iyLipi9eacG`v|e\LaQCi@a0iQa/i2Ui#ahan7iWisaEa
)aZi%i`acPiuacW$i]lif?a7a-a7@iU*eaE3"Ae[aIaJi7iX&i(ziQiQaDziSvagiW{alihaj;r!+a%a
rirR?qiwa[N<rYeat\?]i*9yze;<%alaLitna8i[aYYa&~i'aHisi3iPzi=eah<ZH%q]@eilYiGa5i$h
ri#aJiRitiPasa\RZ'i:i=iCa0iQa#4a*abIIa`ji1CzamaDqiW&i-i0R}$$wiKi-aU$wafOYRioaLEi
Oa~iEi!Da8itasCioiL.iTiYHikaRiE6iwX1Ka6ila4a&@iAd;aIaham+w=i&9>i5ag5=Esei-*@Ieab
_iril[aIak)Fa\DEa<va}7ik[T{)saX*i]i#a}i[ijavViQaoiXaSa1a@i]ifa@a&iXi@a4sa%aki2ya
c=5,9oBauihti$ciIi:ilgayarTli0li(i:a*li(i:a*a}afisi|a?a*i'aOa4aE(IiEa>iRB2i0aliT
i:'ida%E}iYa$6fiZea+B7"Veti@Zi$i2RaE-iXSja#aySja#-aKaz

If you can show some source-code that would decode both of these text-blocks back into their correct images, you'd get the points :)
LVL 9
doronbAsked:
Who is Participating?
 
Infinity08Commented:
Without the original image, i wouldn't even have started with it heh.

Here's the second image btw :

http://www.imagecabin.com/images/GlD61374.jpg
0
 
qwaleteeCommented:
This may as well have been titled "For Synque"

Well, I suppose I could use Synque's code as a starting point, assimilate the info you gave on why you change dthings, and have a crack at it.  But the kids are crying and the migration project is behind, so...

Lehitraot
0
 
doronbAuthor Commented:
Ok qwaletee, lehitraot, ve'be'hatz'la'kha ;)

Actually, to give a hint, synque's code is missing just one small part really :)
0
How do you know if your security is working?

Protecting your business doesn’t have to mean sifting through endless alerts and notifications. With WatchGuard Total Security Suite, you can feel confident that your business is secure, meaning you can get back to the things that have been sitting on your to-do list.

 
qwaleteeCommented:
Shouldn't that be u'be'hatz... or maybe u've'hatz... well, I'll try reisntalling the encoder for the dikduk algorithm.  ;)
0
 
doronbAuthor Commented:
LOL :)

Where are you now anyway, in Israel?
0
 
qwaleteeCommented:
New York. You?
0
 
doronbAuthor Commented:
North Bay, Ontario.  Ani Po Biglal Ishti, remember that play? ;)
0
 
qwaleteeCommented:
Ken, mai'vin.

Now, how would that decoder change for an Israeli keyboard?  Answer: I don't thin you could, not enough non-Roman charcaters.
0
 
doronbAuthor Commented:
Actually, the decoder doesn't care about Hebrew or English or any other language since if there was a message to encode which would go beyond the English characters, I'd simply encode it as a byte-stream.

The idea behind this encoder is to be able to take any byte-stream -- basically, any value between 0 and 255 -- and encode it as printable characters in the normal ASCII/Keyboard range.

I know encoders like that exist, Base64 for instance, however, I wanted to:

1) Write one myself.
2) Write one that produced more compact results.
3) Write one that produced different results each time you encoded the same data.

I think I got all three "wants", the question of who needs this, now that's a different issue ;)
0
 
qwaleteeCommented:
Understood... you just have an index of 256 characters that "happens" to be somewhat aligned with a standard keyboard (NA English).  If it was a Hebrew keyboard, your algorithm does not change, and you MIGHT have used a different set of characters and ordering in your table.  Put another way, if your table now begins ~1!, nothing prevents you from deciding that the order should be !1~ instead, or dropping the one in favor of some other chavater you don't currently use.  That's all I'm saying.
0
 
doronbAuthor Commented:
Yes, however, the idea was to encode a binary byte-stream as an all-ascii text-block, so I had to stick to conventional English characters...
0
 
synqueCommented:
Okay lemme try to decrypt it this weekend. It looks somewhat more random now. What I know so far is that you still use the same header and the repetitions are handled the same way. Groups of identical characters are also identical in the cipher text, and every plain text character seems to have at most 4 different encodings in the cipher text. My first guess would be that you stopped using the header characters only as a marker and began using their values as well. There's something about a factor of 4 as well ... dunno.
0
 
doronbAuthor Commented:
/me keeps his mouth shut this time!!!! >;)
0
 
synqueCommented:
Then you might have to wait more than 3 months this time, cause I have no idea at this moment (no one else seems to be interested). There are a lot of funny symmetries in the encrypted text. For example, if I look at every plain text characters and its encoding I get this:

(plain text character: positions of the encoded characters in your qwerty charset)  

0: 13 16 23 33
1: 12 17 22 32
2: 11 14 25 31
3: 10 15 24 30
4: 9 20 27 37
5: 8 21 26 36
6: 7 18 29 35
...

Weird, weird. Btw, you should think of it as a riddle. If you just want to encrypt data in a way _I_ couldn't decrypt anymore just XOR it by the output of a pseudo random number generator and store the seed somewhere in the encrypted text. If you keep posting small encoded blocks and hide the encoder on your harddisk no one here would get it, I think.
0
 
doronbAuthor Commented:
Waiting more than 3 months is fine by me >;)

The idea after all IS to make this encoding a little more than a simple substitute-algo...
0
 
synqueCommented:
I still think it's not enough data. Maybe you should at least post another encrypted version of the "old" jpeg.
0
 
doronbAuthor Commented:
Ok, here it is, the same JPEG image as the first one:

{`|m{O`@|{ost_|DpAU|{T(((t|~{T7|{tt'v0|F|{#Q99T^r6TTT88Q7eQ=4__(6u&-&_4u$_4TT!|x
<z{!b>;{#{#'CxB{2X,,,{5XL{2:{3zVb?x{'{v{0F|{4www4_(%##5|N{2{={~m32mN|{oMt=Q0|b|{
#2)R|L|{T-*4uTR'|`@|{0%##y&m6mRm8m#y-E%r9T&w7_'|`@{0`Q|{_T-R55Y8E66EE00R|e|{y-E#
ETY+2!|G{^{-HQ{7{@W{-N`x`Z`U{&{3}`_{z{8k{B{D/{@q(`X|{%=W9w$R|?c{!Z<zb<X{~;?"]kuG
OsoDJ}dOGygU&r3Q%05_E8-%Q2q#|`Gca"DkdLcSKdzF:a;u8Y)o0R*eEwuQT=t&U%|{,`6{c`#{B{?{
b`!`6{V`~{b`4{N`@{c`2|{KI'}:PlpF\s']G}lAJpjOXT+R#um9m(m6mt4Y)u6R*q8W^OXT|`Y|{*#Y
(r%%u8T6EE0R$|6|{0R$uTu62!y+|jH{T17{Y?N`x{6{-T`g`+`_{z{wVZA{A{Eq({M{7{0:Z|{A@f9w
$R~|XMx./v>:,lyFIjiSYasIF[fYSt2+$e4)@90$+7=@)1|`]cdXAzaJDGXhlD"}'AwY*u=I)t0-r)Yq
y*R7|{Z`6{b`%{C`4|{c/B,|`%{<`1{B`#{x`3|{CdJOkaL]h[}g]JsjOGi'C0e5y0r=uTt3TlQEO|`Z
4v{;`~`Q{#`;Z`#1{8`e)`x`eC{S{vW{("`r`H5e`I{vu{\{d`j$`*`A{Fdw`X`!{oYV{%`8{)v{:`Z`
H9{#kv>;{8{R`Ll-;`Q`f{S{!{L`L{t`\{h{I`J{iVD`R{l`fz`t{[{6`o{<..`({Z{<W{qf|`g_R"|I
`D*`e`R`zX`$W{S{%p`L`J`-p`2{}{z`0){^`K{VV\`'`Y`!#]{Z`s{t{"`3{E{g`q`-<`3`D,`={T`Z
{Uk`(`U`w#{0`T`9`;{y[zg`]P]{EBL{C`i{M{E{IC`S`}{V5{N`\{Oi{3`W{sL`:V`e{@{u{d`t`2`Y
o{7{Eeg{%{*{u`G`I`hG{Y|`:}xO[|{L{>`r{UM{\L`Rl`$O`({0{R`Js`'{,{F{g`D{2`"{:{Pj`]{7
S{VA`X{a{%`E`"`[{J{,]{-vI{v`[{J{d7{P`%(O`[{J':{.`W`6sU{6`%pl"Fo`+[a`H`j_{e{1$~`6
!`D{<`OM`k\8{_\iT{v$`J{I$1W{%S`-{66]{<{D{s`(+`Q`%{>`k4p{~{>{L&{L{5Z{J{n{&r<{j`J{
Q{aX`J{*){G6{Bu`y{ZV{x`\{X]\{w\`_0`${W`"{5{!`&{T/`4`qRt{8`^`yD{AI{7B`@`F/`Gx{7`r
`^W|{0T#ynY|7A`&K`t`A{JH`'`l{,`0{2hT`]p{/;{D{d?`w`jc}`j`${fw{f`J`#{l{D`:|{[o0B|7
y{32!{>{/`5{:{5jG`ax{^[A{FS|`G\$k(|0`${Xz0yR{o`r{Io{H0|{IN]'Tp|`q`w`s{fXC^-`)i`A
@{0/|`pr"x|{"{A}{7{E`cStiJ\`l{"{:X`J7`^{_rU`J}a\`sy{[`'c`xu`G:{-N"{=`W{5`~v`l`&`
}d`a`:[I|{-4=.|`y>{BE{zH`U{h{!`g`O`ZxU{k^`'N'{={4{p`4{,{%{7`J`;'{3{f{aY{:N`sNO.i
{bf{r`Q{;h`[{q`]`(u{p{z)O{t{9{kX`IW!(K`;`Jsx|`S~AU|J{Q/`c`-{t9|`T=&L|:`k{'{c

And another text-block, again, same image:

aj_h_a'/z{#R_){IP_a@&&&#_5a@4_a##GO7_Ta8>_a0069`3666$$_>a4a(aYm_a5886_zaRa+a%Caw
atawL_awtWWu_vBVaucVX::l.:aq/na2a2a2lB/>a^a`a!'a9a1MaGaOa7Ta*...a5a8a6Za%a%ar/aY
aQlh32h/_azb#t_>a7<_a8Y*3_x_a@8-*1r3GL7Y882(h6h3h8h82840`064_._a48GL7_jR_aR@83&&
!94))~~773_=_a2848~r5EY_?Ra9vF`a(ayqaw/jOj"j6a4aTOjWaNcg_a.lt~_!+joa#a*aTx_a-E-R
_bz;aW;<a@a&a@?Ma%pu]q]oy)GSK$KFA@%@&F&$!Sw)rorq(u_jD\GuGS]tzkc-c;k9k&)Zq(q:^=Yf
IRIsWYWa:NC<K<BXG_j3a/j5a}j5j1_a/P/U{_j4a|aOa|j2_aU{U,lf'n'Hfvf',@e381h9h&h6h#*!
*%)_?a)a&a$<_a$',@_jo_a-8!&$00196)~~737_I_a7371r%)Y_?a^aEEFa6%{at:/jOa3awIjQj)jW
aN.Cmfa<ay!+asa4aeba*a]'aLx_a-E-r_BX:awa!>a!a^Na~ow[i[=tpF%JDJ#\G$G^#^D~%qpe=ei*
w_jsIf}fYPsPqZLC)C"K*-7QzQ97;7ruDoyoAeiab;mcmkzbzA_j#j~j%a]j%j@_a?p}Is_j3asaPaIj
1_aIFKN:J:VDLGp7(&27$t1r#_<_a@'0+V_j"eZj5a>jRa8jRVaz%cjR7j:jkXagaMKa&a1jujr6#jTa
ORadapjE^jOjfa>}~jlaGaPk'Zj9aQZj$j"jdw:g>_a!393_jxa48?j8j0a\zaHjtaYjca"aZj:aL')j
eaij[a5jWa:a)jcanvvj+aian3ar0_jsWOu_[jHQjkjej[la"qaga04jKjsj&4a/aFaNj}*aTjca\COj
KjZa?WYaij{_a#nly]_j(jdnaXjPaejQa6j;aXgjIjWjf!aejIj|jka^ia5Hj'U^aycxapjOj!a+aZXj
kjSa\6j1jgaVT"jUa,Zj{'jka~a%apj;a/j7y'ay#AZa)a%j}jCjdRaQ_ji|AR7_aKaNjuaX.adxj:'a
vRj\a7a3j'8jxj`aka.jGZjHj$aoijs'\a/fjoasaYjYjuj}aIac^a8>TaOj}aIap{aoac+$j}aIBa^j
~j-j~8yauj`4'a1|5j)DGjrjl6ayaE^Qj~tjGj~jRa-j;O@MSJIaO^jsa{p23a0=j+au~^ana}a[j\ej
Rj`afj;etarj`aP2j%a6mafa{a(@a@j`j:a0aia&j:a-Ej!7a.]jlaV,aBj(aZsg.SjWqa"aqjPa&auj
(a6makj0gpcj*jqHa<[aya`aLjS;j}a8a4j)j-K_a7682,5_#*j(a`jpj*a:UjKjTaNjo>+ij'taDza}
apaRj-jDL6jlavaLfagjsa.j2aGj{_aAz7._#`a`q4afj!aVaglfRjGa8a$Dfa>\jljga"j;jIqa"aZa
!q`uaKjuaZPa|q_aZBfG@U_jyj*j8agnz]8jE[j*~aem_jxTP:_aoa]Sa(a~jz{p2GOjCaoaLnj'{j*a
8)@j:SG(j{FaAjUbjA]jqLaw/a%aQj-a&aJxjGj0j6}jCjk7[awa*mj~jqa!a]wj#dj"adzjAjXj"MPj
3$j]/_a6QtSkNY(_jejka@<a/askaga=j{xRawTa?Ja`j=a[\j7aWj'j+3aUj#E$_aY=F&_ju34\"jFj
'8v_jk5*p_YaYatjzjra=|_jre0t_LjSaGaP
0
 
doronbAuthor Commented:
Also, just to have some fun, here's the text "QwertyEncoding is better than Base64 any day!!", without the "" of course, repeated 10 times:

mfp$H9-.qrSX&5)v!~BvE"(lqq!12q&9XvY9>4B:2^4525#5@@

`cma\)$0)QI82^5$&@v$0L8@))#rK)6^8kt^(3<?K17)K@!)kk

lxe'h&`<=~RX&_~b1r:br/#K==W_#=82XvF2,$bN#^-w#4+w33

k`vug=04rqAw$8(W34.W+K)*rr3@<r$=wcT=#&.L<%&8<818,,

ynawo+2@^_u+q~@E_$lE5V!9^^%(>^3`+?[`2W/<>=`=>e&=..

pgtqT8*!2Ear(48=E`,=!Z-02213N2&)rnU)1)NlN*$^N03^nn

sfaxt*25#Ey-8$@*W~l*`"!W##!(/#7`-My`%-n</94=/_#=??

exv"A&(n*~aC3_9c%r.c-/0'**W21*8_C;F_N`bK12-&1~+&!!

rv`eu13=#8i69q@^W9K^1.!~##0('#R16mS1_=K,'0+q'_=q::

qor"t=_n@-fv9`-CR4mC1B8Z@@5`1@#(vN](N0?z18~%1)7%!!

Each line is its own text block.
0
 
qwaleteeCommented:
Doron, is this an intellectual exercise?  Or does this have some real-world purpose?
0
 
doronbAuthor Commented:
Bit of both really.
0
 
qwaleteeCommented:
That is the answer of a cipher.
0
 
doronbAuthor Commented:
LOL :)
0
 
doronbAuthor Commented:
So... any progress, or should I just close this question?
0
 
synqueCommented:
Well, I still want to work on it, but right now I can't.
0
 
doronbAuthor Commented:
Whenever you can is alright, just help me keep the question open :)
0
 
doronbAuthor Commented:
I would actually like to keep the question open so that synque or qwaletee can decrypt the text-blocks.
0
 
synqueCommented:
Yep, I'm still here as well. I think I'll try it again this weekend. Just didn't want to do the second challenge right after spending a couple of hours on the 'old' question. Can't promise a solution though :P
0
 
doronbAuthor Commented:
That's alright.. I just thought I'd stop "nagging" ;)
0
 
Mark BradyPrincipal Data EngineerCommented:
Keep it open I'll have a go over the next few days !


Mark
0
 
doronbAuthor Commented:
Basically, any comment posted will keep the question open until an answer's given :)
0
 
doronbAuthor Commented:
By the way, elvin66/Mark, I suggest you read through the previous question at [ http://www.experts-exchange.com/Miscellaneous/Puzzles_Riddles/Q_21314301.html ] to catch up on what's been going on... :)
0
 
VenabiliCommented:
>>Basically, any comment posted will keep the question open until an answer's given :)
Not exactly.. if there is no new information for a while and just "Keep it open", the Cleanup Admin takes an action and just start the closings. This way ensuring that noone is just trying to keep a question too long and thus missusing the point ssystem.
0
 
doronbAuthor Commented:
I trust you understand, Venabili, that I'm not keeping this question open to spite anyone, or missuse the point system.
0
 
VenabiliCommented:
Noone said anything on this question - I was explaining practices :)
0
 
doronbAuthor Commented:
Ah... :o :)
0
 
doronbAuthor Commented:
So... have we lost all hope?
0
 
Infinity08Commented:
I just want confirmation for something ... I can decode the three versions of the first image, and the 10 versions of the text string, but when i decode the second image, i get a partly corrupted image : the top 1/3 of the image is fine, but after that, the colors get weird ... can you confirm this, or should i look for a bug in my decoder ?
0
 
Infinity08Commented:
My mistake ... it decodes fine :) Was a copy-paste problem lol
0
 
Infinity08Commented:
So, here's my code that breaks your encoding :) It's not very clean code, as it's the result of a lot of tweaking and changing along the way, and i can't be bothered to clean it up atm lol.

---- code block start ----

#include "stdio.h"

char enc[2048] = { 0 };
unsigned char dec[2048] = { 0 };

char alphabet[94 + 1] = "`~1!2@3#4$5%6^7&8*9(0)-_=+qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"zZxXcCvVbBnNmM,<.>/?";

char alf[90 + 1];

int find_in_alf(char c) {
  int i;
  for (i = 0; i < 90; i++) {
    if (alf[i] == c)
      return i;
  }
  return -1;
}

int decode(int length) {
  int i = 0, j = 0, k = 0;
  char prev = '\0';
  int prev_base = 0;
 
  int base = 0;
  unsigned char block = 0;
 
  j = 0;
  for (i = 0; i < 94; i++) {
    if ((alphabet[i] != enc[0])&&(alphabet[i] != enc[1])&&(alphabet[i] != enc[2])&&(alphabet[i] != enc[3])) {
      alf[j++] = alphabet[i];
    }
  }
  alf[i] = '\0';

  j = 0;
  k = 0;
  prev = '\0';
  prev_base = 0;
  base = 0;
  block = 0;
  for (i = 4; i < length; i++) {
    if (enc[i] == enc[0]) {
      base = 90;
    }
    else if (enc[i] == enc[1]) {
      base = 180;
    }
    else if (enc[i] == enc[2]) {
      base = 0;
      block ^= 1;
      prev = '\0';
    }
    else if (enc[i] == enc[3]) {
      char number[16];
      int count;
      int l = 0;
      while (enc[++i] != enc[3])
        number[l++] = enc[i];
      number[l] = '\0';
      sscanf(number, "%x", &count);
      dec[k++] = (unsigned char) ((unsigned char) find_in_alf(enc[++i]) + base)^((unsigned char) enc[j]);
      j = (j + 1) % 4;
      prev = enc[i];
      //prev_base = base;
      for (; count > 1; count--, k++) {
        dec[k] = dec[k - 1];
      }
      if (!block) {
        base = 0;
      }
    }
    else {
      if ((enc[i] == prev) && (base == prev_base)) {
        dec[k] = dec[k - 1];
      }
      else {
        dec[k] = (unsigned char) ((unsigned char) find_in_alf(enc[i]) + base)^((unsigned char) enc[j]);
        j = (j + 1) % 4;
        prev = enc[i];
        prev_base = base;
      }
      if (!block) {
        base = 0;
      }
      k++;
    }
  }

  return k;
}

int main(int argc, char **argv) {
  FILE *in;
  FILE *out;
  int length = 0;

  if (argc != 3) {
    fprintf(stdout, "provide input and output files :\n  %s <inputfile> <outputfile>\n", argv[0]);
    return 1;
  }
  in = fopen(argv[1], "rb");
  length = fread(enc, 1, 2047, in);
  if (length <= 0) {
    fprintf(stderr, "ERROR : could not read from file\n");
    return 1;
  }
  fclose(in);
 
  length = decode(length);
  fprintf(stdout, "decoded %d bytes !\n", length);
 
  out = fopen(argv[2], "wb");
  if (fwrite(dec, 1, length, out) <= 0) {
    fprintf(stderr, "ERROR : could not write to file\n");
    return 1;
  }
  fclose(out);
  return 0;
}

---- code block end ----

It took me a few hours to break ... but that was largely because the original image (of the first text block) was available. That way i could easily work my way back to reverse-engineer your encryption scheme.

Anyway : if you have any further questions, just let me know :)
0
 
doronbAuthor Commented:
I wonder how long it'd've taken you if you had to start from scratch.  Anyway... I'm gonna close this question soon, after I ask someone to check your C code (I don't even have a C compiler on my machine.. sorry).
0
 
doronbAuthor Commented:
The image is the right one... but I can only get back to this after the 16th of August as I'm currently away from my computer and codebase and other dev-tools.
0
 
Infinity08Commented:
Take your time :)
0
 
doronbAuthor Commented:
I'm back in Canada now and will try to find the time to split the points fairly. :)
0
 
doronbAuthor Commented:
Thanks to everyone who participated and helped.  I gave full points to Infinity08 since the riddle was completely solved.

Qwaletee and Synque, sorry about not giving you guys anything this time.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.