summaryrefslogtreecommitdiffstats
path: root/challenge/c06.go
diff options
context:
space:
mode:
Diffstat (limited to 'challenge/c06.go')
-rw-r--r--challenge/c06.go181
1 files changed, 133 insertions, 48 deletions
diff --git a/challenge/c06.go b/challenge/c06.go
index 6bd7faf..9e0d81d 100644
--- a/challenge/c06.go
+++ b/challenge/c06.go
@@ -8,6 +8,139 @@ import (
"ricketyspace.net/cryptopals/lib"
)
+func C6() {
+ bs := lib.Base64ToBytes(cipher)
+
+ // Compute keysize.
+ ks := lib.KeySizeWithMinDistance(2, 40, bs)
+ fmt.Printf("Computed key size: %d\n", ks)
+
+ // Crack key and decrypt data.
+ key, text := crack(bs, ks)
+
+ // Barf result.
+ fmt.Printf("Key is '%s'\n", key)
+ fmt.Printf("Decrypted text:\n%s", text)
+}
+
+// 'bs' is the data to decrypt.
+// 'ks' is the key size.
+func crack(bs []byte, ks int) (string, string) {
+ blocks := lib.BreakIntoBlocks(bs, ks)
+ blocks = lib.TransposeBlocks(blocks, ks)
+
+ key = ""
+ for i := 0; i < len(blocks); i++ {
+ k := findKey(blocks[i])
+
+ key += string(k)
+ }
+ return key, lib.RepeatingXOR(string(bs), key)
+}
+
+func findKey(block []byte) byte {
+ var k byte
+ var s int
+
+ s = 0
+ for i := byte(0); i < 255; i++ {
+ ks := lib.FillBytes(i, len(block))
+ xs := lib.FixedXORBytes(block, ks)
+
+ score := lib.AlphaPunchScore(xs)
+ if score > s {
+ s = score
+ k = i
+ }
+ }
+ return k
+}
+
+// Output:
+//
+// Computed key size: 29
+// Key is 'Terminator X: Bring the noise'
+// Decrypted text:
+// I'm back and I'm ringin' the bell
+// A rockin' on the mike while the fly girls yell
+// In ecstasy in the back of me
+// Well that's my DJ Deshay cuttin' all them Z's
+// Hittin' hard and the girlies goin' crazy
+// Vanilla's on the mike, man I'm not lazy.
+//
+// I'm lettin' my drug kick in
+// It controls my mouth and I begin
+// To just let it flow, let my concepts go
+// My posse's to the side yellin', Go Vanilla Go!
+//
+// Smooth 'cause that's the way I will be
+// And if you don't give a damn, then
+// Why you starin' at me
+// So get off 'cause I control the stage
+// There's no dissin' allowed
+// I'm in my own phase
+// The girlies sa y they love me and that is ok
+// And I can dance better than any kid n' play
+//
+// Stage 2 -- Yea the one ya' wanna listen to
+// It's off my head so let the beat play through
+// So I can funk it up and make it sound good
+// 1-2-3 Yo -- Knock on some wood
+// For good luck, I like my rhymes atrocious
+// Supercalafragilisticexpialidocious
+// I'm an effect and that you can bet
+// I can take a fly girl and make her wet.
+//
+// I'm like Samson -- Samson to Delilah
+// There's no denyin', You can try to hang
+// But you'll keep tryin' to get my style
+// Over and over, practice makes perfect
+// But not if you're a loafer.
+//
+// You'll get nowhere, no place, no time, no girls
+// Soon -- Oh my God, homebody, you probably eat
+// Spaghetti with a spoon! Come on and say it!
+//
+// VIP. Vanilla Ice yep, yep, I'm comin' hard like a rhino
+// Intoxicating so you stagger like a wino
+// So punks stop trying and girl stop cryin'
+// Vanilla Ice is sellin' and you people are buyin'
+// 'Cause why the freaks are jockin' like Crazy Glue
+// Movin' and groovin' trying to sing along
+// All through the ghetto groovin' this here song
+// Now you're amazed by the VIP posse.
+//
+// Steppin' so hard like a German Nazi
+// Startled by the bases hittin' ground
+// There's no trippin' on mine, I'm just gettin' down
+// Sparkamatic, I'm hangin' tight like a fanatic
+// You trapped me once and I thought that
+// You might have it
+// So step down and lend me your ear
+// '89 in my time! You, '90 is my year.
+//
+// You're weakenin' fast, YO! and I can tell it
+// Your body's gettin' hot, so, so I can smell it
+// So don't be mad and don't be sad
+// 'Cause the lyrics belong to ICE, You can call me Dad
+// You're pitchin' a fit, so step back and endure
+// Let the witch doctor, Ice, do the dance to cure
+// So come up close and don't be square
+// You wanna battle me -- Anytime, anywhere
+//
+// You thought that I was weak, Boy, you're dead wrong
+// So come on, everybody and sing this song
+//
+// Say -- Play that funky music Say, go white boy, go white boy go
+// play that funky music Go white boy, go white boy, go
+// Lay down and boogie and play that funky music till you die.
+//
+// Play that funky music Come on, Come on, let me hear
+// Play that funky music white boy you say it, say it
+// Play that funky music A little louder now
+// Play that funky music, white boy Come on, Come on, Come on
+// Play that funky music
+
var cipher string = `HUIfTQsPAh9PE048GmllH0kcDk4TAQsHThsBFkU2AB4BSWQgVB0dQzNTTmVS
BgBHVBwNRU0HBAxTEjwMHghJGgkRTxRMIRpHKwAFHUdZEQQJAGQmB1MANxYG
DBoXQR0BUlQwXwAgEwoFR08SSAhFTmU+Fgk4RQYFCBpGB08fWXh+amI2DB0P
@@ -72,51 +205,3 @@ DBBOFRwOBgA+T04pC0kDElMdC0VXBgYdFkU2CgtNEAEUVBwTWXhTVG5SGg8e
AB0cRSo+AwgKRSANExlJCBQaBAsANU9TKxFJL0dMHRwRTAtPBRwQMAAATQcB
FlRlIkw5QwA2GggaR0YBBg5ZTgIcAAw3SVIaAQcVEU8QTyEaYy0fDE4ITlhI
Jk8DCkkcC3hFMQIEC0EbAVIqCFZBO1IdBgZUVA4QTgUWSR4QJwwRTWM=`
-
-func C6() {
- bs := lib.Base64ToBytes(cipher)
-
- // Compute keysize.
- ks := lib.KeySizeWithMinDistance(2, 40, bs)
- fmt.Printf("Computed key size: %d\n", ks)
-
- // Crack key and decrypt data.
- key, text := crack(bs, ks)
-
- // Barf result.
- fmt.Printf("Key is '%s'\n", key)
- fmt.Printf("Decrypted text:\n%s", text)
-}
-
-// 'bs' is the data to decrypt.
-// 'ks' is the key size.
-func crack(bs []byte, ks int) (string, string) {
- blocks := lib.BreakIntoBlocks(bs, ks)
- blocks = lib.TransposeBlocks(blocks, ks)
-
- key = ""
- for i := 0; i < len(blocks); i++ {
- k := findKey(blocks[i])
-
- key += string(k)
- }
- return key, lib.RepeatingXOR(string(bs), key)
-}
-
-func findKey(block []byte) byte {
- var k byte
- var s int
-
- s = 0
- for i := byte(0); i < 255; i++ {
- ks := lib.FillBytes(i, len(block))
- xs := lib.FixedXORBytes(block, ks)
-
- score := lib.AlphaPunchScore(xs)
- if score > s {
- s = score
- k = i
- }
- }
- return k
-}