raganwald
(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Saturday, June 14, 2008
  Today's public key is { :n => 46, :e => 5 }



def rsa_encrypt(message, public_key)
n = public_key[:n]
e = public_key[:e]
n_arr = message.downcase.scan(/[a-z]| /).map { |character|
"abcdefghijklmnopqrstuvwxyz ".index(character)
}
n_arr.map { |m|
(m ** e).modulo n
}
end

def rsa_decrypt(ciphertext, private_key)
n = private_key[:n]
d = private_key[:d]
n_arr = ciphertext.map { |c|
(c ** d).modulo n
}
n_arr.map { |n| "abcdefghijklmnopqrstuvwxyz "[n,1] }.join('')
end

And the secret message is: [11, 38, 13, 0, 24, 36, 16, 26, 36, 18, 24, 36, 1, 16, 21, 11, 17, 13, 0, 24]
 

Comments on “Today's public key is { :n => 46, :e => 5 }:
I was going try to and write a brute force breaker, but then I thought if :e is 5, :d is probably pretty low too.


Happy Birthday!
 
(1..10).each { |d| puts rsa_decrypt(ciphertext, {:n => 46, :d => d}) }

Happy birthday :-)
 
Happy Birthday!
 
Happy Birthday!
 
What a coincidence! I was trying to remember how to compute d before going out to my b-day lunch :-)

phi = (p - 1) * (q - 1)
d * e = 1 + k * phi

Happy birthday!
 
Happy birhtday :)
 
That's actually a substitution cipher generated in an obfuscated fashion. But happy birthday!
(and, unfortunately, the decription program was written in python, "for i in xrange(26): print chr(ord('a') + i), (i ** 5) % 46")
 
Happy Birthday!
 
Seems I'm a bit late.

Happy belated!
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

Books
What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /