Skip to content

Instantly share code, notes, and snippets.

@cormacrelf
Created June 12, 2011 02:59
Show Gist options
  • Save cormacrelf/1021204 to your computer and use it in GitHub Desktop.
Save cormacrelf/1021204 to your computer and use it in GitHub Desktop.
Ruby Vigenere Cipher cracker (password list)
class EnumLike
@server_Symb=[:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, :l, :m, :n, :o, :p, :q, :r, :s, :t, :u, :v, :w, :x, :y, :z]
@string_array=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
def EnumLike.hash_of_symbols
server_Enum=Hash::new
i=1
@server_Symb.each{ |e| server_Enum[e]=i; i +=1}
return server_Enum
end
def EnumLike.hash_of_strings
hash_strings = Hash::new
i = 1
@string_array.each { |str| hash_strings[str] = i; i +=1}
return hash_strings
end
end
$symbols = EnumLike.hash_of_symbols
$strings = EnumLike.hash_of_strings
pwds = File::read("./task2passwords.txt").to_s.gsub(/\r\n/, "\n")
input = File::read("./task2crypt.txt").to_s.gsub(/\r|\n/, "")
# input = "ANPISHGHIEKIITKTUUIVXRTEPRVFLBSSTSWIJDWKZEQIDSGWSGMBWIEHNVYTUEDSRUYJIEWRLLMTGDGBGNEHQVVJIEWRPCUPUHVVSRWIQRNWXRUKDRQLVHHFFKYOILRGKVGFEHQPYDMELEITARHVIFXACEOOTQMQSBWEIOEGEJSKPYWAFLWBASXEFHBGLRVNZSGCUGIGWNOEZCVHWBSSTSWIJDWKZEQIDSGWSGMBWIEHNQETUOFNFOSWLVSTEAOKOXXZLSNLQAEWLRLTSEDEJHVVGTSEDSJKSNWRPAIAEHSWATTNOLHGMEYCSADLRVFRTBLGQFERQNAKAEPIN".gsub("\n", "")
def decode(input, passwordList)
raise ArgumentError, "Input is not a string" if input.class != String
raise ArgumentError, "Password list is not a string" if passwordList.class != String
# puts input
input = input.downcase!
puts "Decoding..."
pwd_chars = Array::new
pwds = Array::new
passwordList.downcase!
passwordList.lines.each do |line|
len = line.length - 1
position = 0
pwdcodes = Array::new
line.each_char do |letter|
position += 1
letter.downcase!
if letter != "\n" then
#print $strings[letter]
pwdcodes << $strings[letter]
#if position <= len then
#print ";"
# pwdcodes << ";"
#end
#pwd_chars << $strings[letter]
end
end
pwd_length = pwdcodes.length
input_position = 0
output = String::new
input.each_char do |in_char|
# print in_char
in_code = $strings[in_char]
pwd_code = pwdcodes[input_position % pwd_length]
out_code = in_code + 1 - pwd_code
$strings["e"] + 1 - $strings["s"] if input_position == 1 # =>
while out_code <= 0 do
out_code = 26 + out_code
# puts out_code
end
while out_code > 26 do
out_code = out_code - 26
end
out_char = $strings.invert[out_code]
input_position += 1
# puts out_char
output << out_char
end
if output.include?("attack") then
30.times { print "//"}
print "\n"
puts output, "Found using #{line}"
return true
end
end
#puts pwd_chars.to_s
return
end
success = decode(input, pwds)
if success then
puts "Success!"
else
puts "Failure!"
end
ANPISHGHIEKIITKTUUIVXRTEPRVFLBSSTSWIJDWKZEQIDSGWSGMBWIEHNVY
TUEDSRUYJIEWRLLMTGDGBGNEHQVVJIEWRPCUPUHVVSRWIQRNWXRUKDRQLVHH
FFKYOILRGKVGFEHQPYDMELEITARHVIFXACEOOTQMQSBWEIOEGEJSKPY
WAFLWBASXEFHBGLRVNZSGCUGIGWNOEZCVHWBSSTSWIJDWKZEQIDSGWSGMB
WIEHNQETUOFNFOSWLVSTEAOKOXXZLSNLQAEWLRLTSEDEJHVVGTSEDSJK
SNWRPAIAEHSWATTNOLHGMEYCSADLRVFRTBLGQFERQNAKAEPIN
aardvark
abductor
abnormalities
abortive
abruptly
absoluteness
abstract
abutters
accentuate
accessing
accolade
accomplishers
accounted
accumulator
achievements
acoustically
acquisitive
activations
acuteness
additive
adequately
adjourns
adjustors
admirations
admonition
adulterate
advantaged
advertised
advocates
affirmative
affronts
agglomerated
aggregations
agonized
airfoils
alarmist
algorithmically
alleging
alligators
allowable
alphabetics
alternative
amalgams
ambitions
amenities
ampersands
amputates
analysts
anastomoses
anecdotal
anhydrous
annihilates
annoyers
anonymity
anteaters
antibiotics
antinomian
antislavery
aperiodicity
apostolic
appealingly
appendicitis
application
apportioning
appreciations
approached
approvers
arachnid
archdiocese
archives
arithmetical
arraigns
arrogated
articulate
artillerist
ascertains
aspirations
assemblage
assertiveness
assimilated
associatively
asterisk
astronomers
atemporal
atrocity
attainers
attentionality
attracting
atypically
auditioned
auspiciously
authority
autocratic
automatic
autumnal
aversions
awkwardly
backaches
backplanes
backtracked
baffling
ballgown
bandstand
banquets
barbecued
barnyards
baseball
bathroom
beachhead
beautifiers
bedraggle
befouling
beguiled
belatedly
belligerently
beneficence
bequests
besmirching
bettering
bibliographic
biennium
billowed
blackening
bladders
blaspheming
blighted
blockade
bloodstream
bluestocking
boasters
bodybuilding
bonanzas
boomerangs
borrowed
bowdlerized
brainstem
braveness
breakdown
breathed
bridegroom
bristling
broadness
brothels
brushlike
budgeting
bulletins
bunkmates
bushwhacks
butternut
cabbages
calendars
cameramen
candidacy
canonicalization
capaciousness
capitals
capturing
carcinoma
carnation
cartridge
cataclysmic
categorized
causation
ceaselessly
cemetery
certainty
chairwoman
championships
chanting
charcoal
chastely
cheapness
cheerfully
chestnut
chimpanzee
choosers
chronicler
churchwoman
circulate
circumspectly
civilians
clamping
classifier
cleanses
cleverness
clippings
clothing
clutches
coatings
coefficient
cognitively
colander
collaring
collision
colonizing
combinatorially
comforted
commemorates
commenting
committeewomen
communicant
commutes
comparatively
compatible
competition
complaints
compliance
componentry
comprehending
compromiser
computerized
conceded
conceptions
conciliatory
concurred
condescend
conductivity
confessions
configures
conflict
confronters
congratulations
conjectures
connectionless
conquering
consented
conservator
consistently
consortium
constituencies
construct
consultations
contacts
contemplation
contents
contingents
contraception
contrapositive
contributors
controversy
convergence
convertible
convincingly
cooperators
cordially
corporals
correlates
corroborates
costumed
councilwomen
countered
counterrevolution
courteous
coverage
crackles
crawling
credible
crestfallen
criticized
crossroad
crumbled
crutches
cufflink
cultures
curricular
customary
cycloidal
dandelion
daydream
deallocating
decadently
decennial
deciphered
declaring
decomposition
decrement
deemphasize
defender
defiantly
deformities
delegate
delicacies
delineated
delusions
demolishes
demultiplexer
denoting
departures
deplores
depreciate
deregulate
describe
deserves
desiring
despotic
destructiveness
detection
determinative
devastate
devising
diagnoses
dialysis
dictators
differentiating
diffusions
digression
dimensions
direction
disambiguated
disarmed
discarding
disclaim
discontinuance
discoverer
discriminating
disfigured
disheartening
disinterested
dislocation
dismounts
dispatchers
displaced
disposing
disregard
dissemination
dissociate
distemper
distinguishes
distributing
divergences
dividends
dockyard
dodecahedron
dominates
doubleton
download
draftsman
drawings
drifters
druggist
duplicated
dwindling
earnestness
eastwards
economically
educating
efficient
ejaculate
election
electrocuting
elegance
eliminating
elucidation
embellishes
emergence
emperors
employments
encamped
encloses
encouragingly
endeavored
enervate
engineers
enlargement
enormous
ensnared
enthusiasm
entrenched
enveloper
epidemic
equalization
equipped
erringly
especially
estimates
evaluate
eventual
evolutes
exaggeration
excavation
excesses
exclaimers
excreted
executives
exerting
exigency
expansion
expeditions
experimentations
expletive
explores
exporters
expressive
extensively
extorted
extrapolation
eyeglasses
facsimiles
faithfulness
familiarization
farewell
fashions
fattening
featherer
felicity
fertilize
fickleness
fighters
finalized
finished
fireworks
flabbergast
flattering
flexibly
flopping
fluctuating
followers
footprints
forecasts
foresight
forfeiture
formalization
formulated
fortitude
foundered
fracturing
fraternally
frequencies
fretfulness
frightfulness
fruition
functionalities
furiously
gadgetry
gangsters
gathered
generalizing
gentleman
geometrically
gigabits
goldenrod
grabbers
grafting
grandparent
graspingly
graveyard
grenades
groaning
gruesome
guessing
gymnastics
hallowed
handiest
haphazardly
hardship
harshness
headgear
hearings
heighten
hemostat
heritages
heterosexual
highlight
hindsight
hoarseness
homemaker
homogeneous
honorably
horrible
hospitalized
housekeeping
humidifier
hundreds
hydrogen
hypothetical
identical
idolatry
illuminating
imaginably
immaterial
imminently
impartial
imperative
impersonally
implement
implored
impotence
impressionable
improper
impulsion
inadvertent
incandescent
incidentally
inclusions
incompletely
inconsistently
increase
incubating
indelible
indicates
indignity
individuality
inductance
industrialized
inequity
infallibility
inferior
infinitude
influence
infrastructure
ingenuous
inheriting
inimical
initiations
innocence
inorganic
inscrutable
insignificance
insomnia
installers
instigating
institutions
instruments
insurmountable
intellectually
intensity
intercepting
interconnect
interfaced
interlaces
intermix
interpolated
interrelate
interruptive
intervene
intimately
intractable
intriguing
intrusion
invalidity
inventories
investigative
invoiced
irrationally
irresistible
irritates
itemizations
javelins
journalists
judicious
justifying
kidnappings
kitchenette
knuckles
lacquered
landscape
latitudes
laureate
leaflets
leftover
legislature
letterhead
liberalized
licensing
lighters
limestone
linguist
literalness
loadings
lounging
lumbered
machinery
magnetically
mainframes
maladies
management
manifest
manipulatory
mappings
marketplaces
masculinity
masterpiece
maternal
maturing
meaningfully
mechanism
medicines
megawatt
memoranda
mentalities
methodical
microcode
microphones
microwave
mightiest
milliammeter
mimicking
minimizations
minutemen
misconception
mismanagement
misspelling
misunderstood
moderated
modifies
molecule
mongoose
monopolies
monument
morphological
mouthful
multilayer
multiplicity
mumbling
musculature
mutation
mythologies
narrative
nationals
navigators
needless
negotiated
neuritis
newsletters
nihilism
nominating
nondeterministic
nonmaskable
nonspecialist
normalizes
notarize
notifies
nullifying
nutrition
objector
obscurely
occupancy
oddities
officials
omnipotent
operationally
opposites
optimized
orchestrate
originating
oscillated
ourselves
outlawing
outsiders
overcame
overflow
overlaps
overprints
overshoot
overtakes
overwhelms
packager
paleness
pantheist
paradigms
parallelogram
paramount
pardoned
parliament
participle
passenger
patenter
patriarchy
penguins
perceive
percussion
performs
perished
permitted
perpetually
persevering
personify
pertained
pestilence
phenomena
philosophizing
photodiode
physician
picojoule
pilferage
pinwheel
pityingly
planarity
plasters
playmate
plenteous
plunging
poisoning
politician
pondered
populousness
portraits
possessions
postmortem
potentates
powering
praiseworthy
precaution
precipitately
preconceive
predetermination
predicts
prefabricate
preoccupied
preprocessors
presented
pressing
presupposed
prevailed
pricking
principles
proceeding
procrastinated
production
proficiency
prognosis
prohibitions
proliferation
promoting
pronouncements
propensity
proprietor
prosodic
prostitute
protested
protrusions
provisionally
psilocybin
psychosomatic
puddling
punitive
purporters
puzzlings
quagmire
quantifiers
quarries
questers
quicksand
racetrack
radiology
ramification
raptures
rationally
reacting
readying
reappeared
reassemble
rebelled
rebutted
recaptures
receptivity
recitation
reclassify
recollections
recomputing
recoverable
recuperate
redeclared
redirecting
reduction
reestablished
referenda
reflection
reformed
refreshingly
regenerating
regressing
regulations
relative
relentless
relinquish
remainder
reminders
remotest
renovate
repaired
repentance
replacer
reporter
representatives
reproached
reptiles
reputation
reroutes
resembling
residentially
resistors
resourceful
responded
restates
restrainers
resulted
retailers
reticulated
retroactive
revealing
reversely
rickshaw
rightmost
roadster
rosebush
roundworm
rumbling
sacrificed
sagacious
salamander
sanctioning
satellites
savaging
scanners
scheduler
schooler
scolding
scrambler
screeching
scrupulously
seahorse
seasonings
secretion
seducing
seizures
semantics
sensational
sentential
sequence
servings
sharpest
sheriffs
shippers
shootings
shortish
shredder
shuffled
sidelights
significance
silliness
simplifiers
sinfulness
situated
sketchily
skulking
slaughtered
slightness
slumming
smokestack
snapdragon
snooping
socialist
solidify
sometimes
sorrowfully
sovereign
sparsest
specifiable
spectacularly
speculation
spherically
spiteful
splitting
sportingly
sprightly
spurious
squeaked
stairways
stanchion
starling
stationing
steadfastly
steepest
stereotypical
stiffens
stinging
stockbroker
stopwatch
straight
stranger
stratifies
striving
struggled
stupefying
subcomponents
subfield
sublimation
submultiplexed
subroutine
subsequences
subspaces
substituting
subtlest
subverter
suffocates
suitably
summations
superbly
superintendents
supersede
supplants
supportively
surfaced
surprises
survived
suspiciously
sweatshirt
swimmers
sycophantic
symmetry
synaptic
synergistic
tabulations
tantamount
tautologies
technically
telegraph
telescope
temperature
tendency
terminator
terrorism
testimony
theatricals
theorizing
thimbles
thoughtless
threshold
thumbing
tightens
totallers
townships
trafficking
transact
transcriptions
transformers
transitive
transmittal
transponders
traveled
treasures
trespasser
triggered
triumphed
troubling
truthfulness
twenties
typifies
unaccountable
unanswered
unbiased
uncleanly
unconstrained
undecided
undergoing
underpinning
undertaker
undeveloped
unidirectionally
uninteresting
universe
unlimited
unnaturally
unplanned
unresponsive
unsettling
unsurprisingly
unusually
unwrapped
uprooted
utilized
vagabonds
vandalized
variances
vegetating
ventricles
verifies
vibrated
videotape
villagers
visualized
voltages
waitresses
warningly
watchwords
wearable
westerner
whippers
whiteners
wickedness
wiretapping
withstand
woodcocks
workshop
worthwhileness
wretchedness
yellowed
zoologically
@cormacrelf
Copy link
Author

Made for the UNSW ProgComp - http://www.computing.unsw.edu.au/progcomp/
Run the ruby within the folder, and:

  1. It gets some ciphertext from task2crypt.txt
  2. For each password (newline separated), deciphers the plaintext using a vigenere cipher, and checks to see if the result contains "attack" (TODO: use gets to find this keyword)
  3. If it finds a match, the cleartext is printed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment