I see you. And you make a great point. Many eyes, right? New rule. Replace any duplicates with a letter not currently in use. And if it helps you see clearer, place them all at the end. Here is the game that I'm playing. Wherever I look, I desire that it look like everywhere else. The mistake I made was missing a symmetry. I removed this condition with that change in the rule. It doesn't mean that their aren't symmetries I still don't see. And I tell you there are.orthogon wrote:Eebster the Great wrote:... a many-to-one hash actually decreases entropy.
... and moving doubled letters to the end is, at least in principle, a many-to-one process. I was trying to think of some examples where it produces a collision, but in the end I had to revert to regular expressions.Spoiler:
Code: Select all
me@mymachine:~$ sed -e 's/\(.*\)\(.\)\2\(.*\)/\1\2\3\2/g' /usr/share/dict/british-english |sort | uniq -d
Some of the results are a bit dodgy, but some clearly cromulent word-pairs that collide are:
My regex can only move one doubled letter to the end. I tried to make it do it repeatedly, but it gets stuck in an infinite loop once there's a tripled letter at the end. I tried to get around that using negative lookahead, but gnu sed doesn't seem to support that.
Here is what I think I'm reading when I read about this. The safest any string can be is limited by the number of unique elements. Choosing letters gives you 26 unique tokens, and in this case 26 things taken 24 at a time. Their are only 12 cases possible for doubles. The endpoints are,all blank text, to all doubles. The passwords are all the words that could be written using 24 characters while never repeating. Minus those 12 cases. Here is how I view that. What you are hiding with a hash is the first member. If you break the hash you've identified one point. If you have that point you can figure out any password, since you now know the order. Is this close?