Math Is Fun Forum
  Discussion about math, puzzles, games and fun.   Useful symbols: √ ∞ ≠ ≤ ≥ ≈ ⇒ ∈ Δ θ ∴ ∑ ∫ π -

Login

Username

Password

Not registered yet?

Post a reply

Go back

Write your message and submit
:) :| :( :D :o ;) :/ :P :lol: :mad: :rolleyes: :cool: | :dizzy :eek :kiss :roflol :rolleyes :shame :down :up :touched :sleep :wave :swear :tongue :what :faint :dunno
Options

Go back

Topic review (newest first)

NullRoot
2008-01-31 20:31:05

I meant an 'intelligent' method but you're quite right, anyway. I was reading the ASC(...MOD...) one incorrectly.
When I sat down and experimented I saw that I misinterpreted. Bummer smile.

Laterally Speaking
2008-01-31 04:40:54

Nah. You can always brute-force it, but it takes a lot longer.

Here is what makes it impossible to do by any other means than brute-force:
The result is the concatenation of the previous result and the sum of the ASCII values of two characters in the string, the first one cycling through the entire length of said string, the other's position defined by the square root of the length of the previous result.

NullRoot
2008-01-31 04:29:47

Curses! Well that certainly makes it much harder to discern the length of the original string. It might still be doable, but it would require
that when a number is encoded, the result never starts with a 1 or 2. That way you could check if the number begins 1 or 2, if so, isolate the
3 digit code, if not, then isolate the 2 digit code.

I think that if all ASCII characters are potentially allowed (specifically things like .,?!$* etc) that will probably kill off any ability to decode it.

Laterally Speaking
2008-01-31 04:14:58

The entered strings can contain any ASCII characters, as well as numbers. It seems that I did forget the following:

Code:

Dim CompiledString As String
Dim Output As String
Dim x As Integer
NullRoot
2008-01-31 03:13:42

Can you double check the output you gave? I'm assuming that the words are alpha only with upper and lower case. Examples I've tried
so far seem to all produce a 3 digit number for each letter either beginning with 1 or 2. The length of the output you've given isn't
divisible by three. smile
If I'm right, then I believe there is a method, but it does involve brute force (of a kind). It appears initially that for any given string length
each letter corresponds to a specific number depending upon it's position regardless of the other letters around it. I'd basically have to
calculate a massive lookup table.
Assuming I can deduce the length of the string by len(string)/3, then I can use the lookup table to deduce the values for each 3-digit number.

This is all dependant on the fact that the number you gave is missing a digit or two, though wink

Laterally Speaking
2008-01-31 01:30:53

All right; I'll simplify the challenge: could you simply deduce the concatenated string from the end result?

NullRoot
2008-01-30 23:40:32

No, it's fine the way you've done it.
A major step in deciphering it would be to know the total length of the three strings. Even if you were able to deduce that somehow
you'd still be unable to determine what part of the concatenated string is Password0, Password1, and UserName. I thought there was
a clue in the encoding string, but that was before I realised all three strings went into the same variable.

Laterally Speaking
2008-01-30 22:58:02

Unless I made some huge mistake, which is possible, the only way to get back to the original string is the good ol' brute-force method.

NullRoot
2008-01-30 22:49:10

I personally like VB, but I mainly use VBA with Excel. I'll have a go at this later. I think it's doable from a glance, but I'll need to play with it.

MathsIsFun
2008-01-30 11:22:11

VB.net is much better than VB. Instead of buying it, you might like to try "SharpDevelop": http://www.icsharpcode.net/OpenSource/SD/ andlet us know if it is any good.

Laterally Speaking
2008-01-30 07:24:36

In VB, if the strings are numbers, the string + string adds the numbers, but, if they aren't numbers, it "concatenates" them.
Thus, for strings, in VB, the + and & operators do the same thing.

Note that I am not using VB.net, but VB 5.0. There is a world of difference between the two. VB.net is similar to Java. Standard VB is an older language, much less strict as far as syntax goes.

MathsIsFun
2008-01-30 07:15:08

The "string concatenation operator" is one of my main sources of bugs:

PHP: string . string
VB: string & string
actionscript/javascript: string + string (but if the string look like numbers they get added!)

And VB.net is not barbaric ... it is basically just another way of writing the same thing as you would in any other .net language, is fully object oriented, and has the same access to all.net functions, etc, and gets compiled into the same "Intermediate Language".

But when working in VB.net I keep adding ";" to the end of every line and using { } instead of "then end if"

Laterally Speaking
2008-01-30 06:50:32

string & string -> puts the two strings together, in the order they are typed, to form one longer string
Asc(string) -> gives the ASCII value of the first character in the string
Mid(string, integer, [integer]) -> returns the section of the string starting at the position defined by the first integer, and of length defined by the second integer (if it is not present, it returns the text from the starting point to the end of the string)
sqr(integer) -> returns the square root of the number

VB does have a few nice things about it: It isn't case-sensitive, you can leave out spaces, etc., and it corrects it without prompting; furthermore, there are no compilers for Java that have as much freedom for the user interface. There are also many different ways of achieving the same result, from simple to complex, long to short.

I have to agree, however, that there could be some improvements.

luca-deltodesco
2008-01-30 05:57:43

my god VB is more horrible a language than i ever believed, how can you bear working with it? tongue

if you could explain what the & operator does for strings and what Asc and Mid do i might be able to have a try ;p im guessing Sqr squares the number.

Laterally Speaking
2008-01-30 04:43:38

Code:

For x = 0 To 1
    CompiledString = CompiledString & Password(x).Text
Next

CompiledString = CompiledString & UserName.Text

For x = 1 To Len(CompiledString)
    Output = Output & Int(Asc(Mid(CompiledString, x, 1)) + Asc(Mid(CompiledString, Int(((x + Sqr(Len(Output))) Mod (Len(CompiledString) - 1)) + 1), 1)))
Next

I will give high praise to anyone who thinks they know how to retrieve the original information and actually can.

For those without VB 5.0 compilers, here are the results:

Code:

UserName.text = afoiadfjanwief
Password(0).Text = wedraixdn
Password(1).Text = rhescaiufenxe
Output = 21320613321521521313720022519321622014020622920020522023114221614781235202229213137230211142153220216199211202222221210230215201203226196197207223199211229225203216203211219194205222206211214220220200199224218202224217206217202221219201201217196207224222203212212152217201203210216206212207214198224203209206134

Code:

UserName.text = aerjxosadmxxicwwmdxMALW
Password(0).Text = adxneuXddwriox
Password(1).Text = XAwjixnckefexnIXern
Output = 21320613321521521313720022519321622014020622920020522023114221614781235202229213137230211142153220216199211202222221210230215201203226196197207223199211229225203216203211219194205222206211214220220200199224218202224217206217202221219201201217196207224222203203207220221207203199205185165221212202230229204208204198220230183189218202210185166233226216235207199216221222206219229192197221191175173188211206240221216214188209185239211204239229208207221179166196197170201234220198218202206208176234203205229230219206220221210220230150153177201207197221224207208211203162219215225240215198226220211201240187153177201207197221224207237199215185165228226225225229218216201222178185186160185201234220198218202206185230221202220219219227206201220239219173208178179186188211206240221216214188209208185224205224239219199227178178188217210193198202231198197201233220225222235185165228225240215198226220211201240187138164188211210217211215223208215197219223225231225187184238215205240187164183188199201240220190176201214229211206225226208176234203205229230219212200221220219173208178179186184198214226230212232185200209239234210210239207165239183170196221201139217206202152209184197213219218198215198210225143220212132225221235221131229230141149239178165190184

What gave

Code:

Output = 1811291842231331601942231331901811982221911291831291921982151981692092151401201292322052191872062231402101551412332202062296421515764156213212213233232205215133212139147172125199213206224148181218228215199218147227172207225216185205140184149211230198235116171219211142191208211

Board footer

Powered by FluxBB