forked from rab/euler
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path59.rb
More file actions
35 lines (33 loc) · 1.62 KB
/
59.rb
File metadata and controls
35 lines (33 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/ruby -w
#
# Problem 59
# 19 December 2003
#
# Each character on a computer is assigned a unique code and the preferred
# standard is ASCII (American Standard Code for Information Interchange). For
# example, uppercase A = 65, asterisk (*) = 42, and lowercase k = 107.
#
# A modern encryption method is to take a text file, convert the bytes to
# ASCII, then XOR each byte with a given value, taken from a secret key. The
# advantage with the XOR function is that using the same encryption key on the
# cipher text, restores the plain text; for example, 65 XOR 42 = 107,
# then 107 XOR 42 = 65.
#
# For unbreakable encryption, the key is the same length as the plain text
# message, and the key is made up of random bytes. The user would keep the
# encrypted message and the encryption key in different locations, and without
# both "halves", it is impossible to decrypt the message.
#
# Unfortunately, this method is impractical for most users, so the modified
# method is to use a password as a key. If the password is shorter than the
# message, which is likely, the key is repeated cyclically throughout the
# message. The balance for this method is using a sufficiently long password
# key for security, but short enough to be memorable.
#
# Your task has been made easy, as the encryption key consists of three lower
# case characters. Using cipher_59.txt, a file containing the encrypted ASCII
# codes, and the knowledge that the plain text must contain common English
# words, decrypt the message and find the sum of the ASCII values in the
# original text.
cipher = File.read('cipher_59.txt').split(',').map{|c| c.to_i}
puts "unsolved"