Jason's post piqued my interest in how often an undesirable phrase
reared its ugly head in an encoded string. So, I grabbed a
Base36 encoder and went to work.
My goal was to generate a Guid, encode it as Base36, then see if the encoded value contained a "bad word" [1]. I
did this by running 10 repititions, and each repitition ran a loop 100,000 times. In each loop I generated the Guid,
performed the encryption, then inspected the encrypted value.
The list of "bad words" doesn't really have to be all that bad. After all, having the string "DAMN" appear in
a Base36 encrypted value is just as probable as "MIKE". So here's my list:
ArrayList badWords = new ArrayList();
badWords.Add("MIKE");
badWords.Add("DAMN");
badWords.Add("DOGS");
badWords.Add("CATS");
badWords.Add("ASDF");
badWords.Add("LOVE");
badWords.Add("SING");
badWords.Add("POOP");
badWords.Add("FOOT");
badWords.Add("ARMY");
badWords.Add("CAVE");
badWords.Add("SANE");
badWords.Add("FISH");
badWords.Add("JUNE");
badWords.Add("CIAO");
badWords.Add("REST");
badWords.Add("PARK");
badWords.Add("KEEN");
badWords.Add("IONS");
badWords.Add("LIFT");
badWords.Add("RENT");
badWords.Add("DORK");
badWords.Add("SALE");
After running the test app, here's the output:
Ready
Running 10 reps at 100000 loops.
-----------------------------------
Executing rep #1
Found 'DAMN' in Guid '21020ec0-07c2-49cb-ba8f-1d8e8da6c937
Found 'ARMY' in Guid 'd40a5419-2f16-4421-9597-200f3dbbe84c
Found 'DAMN' in Guid '8c430038-4e80-4c87-b4b2-c42b5645d575
Found 'DORK' in Guid '579f88b8-2f37-4d30-abcf-259aa3a8c350
Found 'CAVE' in Guid '4285ea6c-358b-4c71-b848-8167643f4060
Found 'POOP' in Guid '4deac479-53e2-4bd8-9cac-036190ec3321
Found 'PARK' in Guid '02780858-5ac4-4b3d-9c6f-8801d5362ecc
Found 7 bad words in rep #1.
-----------------------------------
Executing rep #2
Found 'CIAO' in Guid '66f5be18-2bb1-41e4-b1d2-cf7b75c2ae34
Found 'SING' in Guid '4924decb-0681-4386-918f-a02100d9aa80
Found 'POOP' in Guid '857939d6-cc9a-485a-b7ba-528bac41b71f
Found 'ARMY' in Guid 'e112d188-a54b-4465-9603-1f39e4003fe1
Found 'REST' in Guid '3f0bd37d-9984-4f2c-94eb-2e71c2855f4f
Found 'RENT' in Guid 'f5e53ac1-d506-4322-951f-4e79d49a8ca5
Found 'RENT' in Guid '955755f5-d129-42ae-88ee-0143d49a216c
Found 'SALE' in Guid '717cb41d-4e8b-43ad-bd28-f67aa20c9992
Found 'CIAO' in Guid '96920248-44d0-492c-8fbf-839f8d4953b2
Found 'POOP' in Guid 'c3a72f1f-d428-4941-ac7e-458fbea6a891
Found 'JUNE' in Guid '3d8abc89-fb15-4aa7-954e-eaa0ae5bf1d8
Found 'ARMY' in Guid '30c57f96-2499-44a8-beaf-31737878e871
Found 'SALE' in Guid 'c43086da-018b-4431-bbc3-76785f480672
Found 'FOOT' in Guid '141804ae-0634-45ab-877e-883c1eaad675
Found 'SING' in Guid 'a5adc705-2ca9-4f1a-8ead-4ecb325ea71b
Found 15 bad words in rep #2.
-----------------------------------
Executing rep #3
Found 'CATS' in Guid 'ef835269-4e09-451d-b3fc-a81bce82ae15
Found 'KEEN' in Guid 'ca3468f4-b0e9-4acb-be1c-0a7415724f64
Found 'POOP' in Guid '16229f82-789f-4296-9e31-8e0b6c7540f4
Found 'KEEN' in Guid '74a1bf82-f1cd-45a7-ad1c-38ddd5724b6e
Found 'CIAO' in Guid '1548aabd-1285-4646-a3b7-1f522e808fa8
Found 'SALE' in Guid 'd7b8cfa0-4f71-44dd-b5a1-baef42f2ba85
Found 'CATS' in Guid 'fda0cb67-f2db-4f4d-8d6e-599abfa9df08
Found 'ARMY' in Guid 'b18e9970-4b70-434d-833a-1541e6f14ee1
Found 8 bad words in rep #3.
-----------------------------------
Executing rep #4
Found 'KEEN' in Guid 'f2a57c56-4566-4a23-b0ec-efc2e57249ab
Found 'POOP' in Guid '6741a134-e384-4080-bd1c-2aed28593321
Found 'CATS' in Guid '95c88dec-86c6-4939-bcdf-7e3242c8c28a
Found 'POOP' in Guid '804bb8ca-0b62-48b9-843c-5d8301f42339
Found 'DAMN' in Guid 'ea0dbef3-8a1a-4e01-9036-f05ed48461f7
Found 'LIFT' in Guid 'e89aedd6-adab-4076-bdfd-10fac2241839
Found 'LOVE' in Guid '66ff502b-c3c0-4bbf-999f-cb507bac6483
Found 'POOP' in Guid '3585f024-f060-490c-a6ec-4bbe56442335
Found 'DOGS' in Guid '7328cf71-549a-4565-9527-925f8223af43
Found 'FOOT' in Guid 'd6ffc471-03ce-4773-bb36-01cddb0b6d44
Found 'FISH' in Guid 'e4c088fb-f860-4edb-8d1d-83cb4cbe1d80
Found 11 bad words in rep #4.
-----------------------------------
Executing rep #5
Found 'POOP' in Guid '0277d35d-58d5-4828-aefd-6e8eee83248a
Found 'DORK' in Guid 'c9529a07-e556-4b95-9dce-e2b473a8c6b9
Found 'ARMY' in Guid 'f0f526fe-97a0-4f9a-9a56-400f3addebef
Found 'SANE' in Guid 'dd5d9d47-342c-4ac0-b06f-95d3c4492a62
Found 'CATS' in Guid 'ac6e78cb-e06f-45ff-813f-b99ac42cc687
Found 5 bad words in rep #5.
-----------------------------------
Executing rep #6
Found 'RENT' in Guid '01c1175d-c223-4950-ab9b-8a9ac2356a16
Found 'CIAO' in Guid '47b53c65-1fef-4a26-962c-d782fd36389e
Found 'POOP' in Guid 'e3d73256-83b8-4b9a-979c-297e8f7f3321
Found 'KEEN' in Guid '1953d869-1793-45e2-b92d-1caba5724c57
Found 'DOGS' in Guid 'e8670494-c6bf-4b42-b5ee-d2f4e46b5b8c
Found 'FOOT' in Guid 'af15f392-707c-44e4-995b-77cf0c45253e
Found 'ARMY' in Guid 'c40d5012-3bb0-41f8-b25e-c98ead68e875
Found 'ARMY' in Guid '22e4856e-6bae-4d6d-b153-07dba615d688
Found 'PARK' in Guid '7add40d7-1884-498a-a9b2-00eba3a72093
Found 9 bad words in rep #6.
-----------------------------------
Executing rep #7
Found 'CIAO' in Guid 'a59cc36d-ac5f-4649-9936-a2ff618b8fa8
Found 'CATS' in Guid '12ce29f7-a8a1-4344-880f-efc89ec8c308
Found 'IONS' in Guid '59594550-21b9-4ec7-9a6e-f5beab17abfc
Found 'CATS' in Guid 'f369c6fe-5772-41c1-8bee-7a0b54c8c280
Found 'PARK' in Guid '1409541f-56e4-438a-8fdf-8e4dc6562ecd
Found 'CATS' in Guid 'fd354ebb-df90-48c9-bc07-fffcde293ad2
Found 6 bad words in rep #7.
-----------------------------------
Executing rep #8
Found 'PARK' in Guid '59757970-292c-4388-af1e-2a2fbb062ec0
Found 'POOP' in Guid '1625a677-07b5-4922-8eec-5f99dc042339
Found 'SALE' in Guid 'ac2df246-abed-4e4f-b92d-3d1bb47f8ca7
Found 'DORK' in Guid 'd5f6f43c-7aea-4766-8b9d-156c1ed9c7ed
Found 'SALE' in Guid '690c2fa6-9034-40a6-8a29-ffa3e892d86a
Found 'ASDF' in Guid 'cd8a3de7-e7c7-43ec-983f-285ee3167b4e
Found 'ARMY' in Guid 'dffb9371-50c6-4605-9f63-4e39e433beb7
Found 'POOP' in Guid '2d071f9d-33e0-4e2a-95df-ab10bea67da4
Found 'PARK' in Guid '09699636-e867-4e11-a4cf-fd3eb0d1c7f7
Found 'IONS' in Guid 'ed0495df-cd42-496b-b99f-2fc0e800abfc
Found 'IONS' in Guid 'ac525992-8a38-4c81-b2dd-250af2131767
Found 'DAMN' in Guid '99f75142-0a7b-4813-bb13-7c2b563d335f
Found 'IONS' in Guid 'dde37fe0-1e88-4554-80bf-6a009e86abfc
Found 13 bad words in rep #8.
-----------------------------------
Executing rep #9
Found 'IONS' in Guid '003bed52-619f-4aa1-8b0e-a08263d8abfc
Found 'DAMN' in Guid 'df697f46-ed3a-4d6f-9efe-638e8d5418ab
Found 'CATS' in Guid '1c6cce8e-13f1-41b3-8cb0-a22e689a07e0
Found 'DOGS' in Guid '9893909a-09cb-4fdd-95c6-d8005a7f7944
Found 'SALE' in Guid '8d344c69-5a44-4932-afc1-0aef4d51c83a
Found 'IONS' in Guid 'e00336c6-48f9-450d-b53f-1510d4f0abfc
Found 'SANE' in Guid '51c85375-ca21-4edc-92ef-d57235392a64
Found 'POOP' in Guid 'a6e9ccfc-9364-4057-846c-38bb312f3321
Found 'SANE' in Guid 'd9128a6d-2e12-4056-85cc-d92bb27c2405
Found 'IONS' in Guid 'a0f7a6f2-e742-4ee3-a6ea-771a3c3455bc
Found 10 bad words in rep #9.
-----------------------------------
Executing rep #10
Found 'CATS' in Guid '0b5c2648-5d56-4ea2-9579-2f30ef62e348
Found 'ARMY' in Guid 'e9b2b8b2-9043-4ae1-ae81-b84738bffc4d
Found 'IONS' in Guid 'b6369528-7cbc-4297-ab4b-f3493c34023f
Found 'ARMY' in Guid 'fd952bf3-675d-478f-9ede-53dfc3d8e871
Found 'SALE' in Guid '9b42967a-c4de-4e60-af89-ef43a43cd86a
Found 'FISH' in Guid '835acc81-d5f4-414a-9c0e-bdfd4790de05
Found 'FOOT' in Guid '1fa8e34d-f9aa-4c20-97ba-256b0c453a6f
Found 'IONS' in Guid '8330e16e-4276-42b6-bad0-fe182a9cf15b
Found 'DOGS' in Guid '1d68f74c-7868-4fec-825f-82e8f2175b8c
Found 9 bad words in rep #10.
Average of 9.3 bad words found per rep.
Done
On average, about 9 "bad words" were found per 100,000 Guids, or 0.009%.
Ok, I have a life to get back to now... really...
[1] The actual Base36 encryption algorithm and system performance of the entire experiment weren't important to me.
The experiment isn't intended to be used as an accurate or significant statistical model either - I just wanted a quick
idea of how often this type of thing happens.