caesar 0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.textile +21 -0
  2. data/lib/caesar.rb +51 -0
  3. metadata +55 -0
@@ -0,0 +1,21 @@
1
+ h1. Caesar Cipher
2
+
3
+ encode/decode any string using the Caesar Cipher method.
4
+
5
+ h3. Instalation
6
+
7
+ pre. gem install caesar
8
+
9
+ h3. Usage
10
+
11
+ bc.. require 'caesar'
12
+
13
+ Caesar.encode('A', 'CAESAR') #=> "CAESAR"
14
+ Caesar.encode('R', 'CAESAR') #=> "TRVJRI"
15
+
16
+ Caesar.decode('A', 'CAESAR') #=> "CAESAR"
17
+ Caesar.decode('R', 'TRVJRI') #=> "CAESAR"
18
+
19
+ h3. Authors
20
+
21
+ Roberto Decurnex ("nex.development@gmail.com":malto:nex.development@gmail.com)
@@ -0,0 +1,51 @@
1
+ # Caesar Cipher
2
+ #
3
+ # encode/decode any string using the Caesar Cipher method.
4
+ #
5
+ # Usage:
6
+ # Caesar.encode('A', 'CAESAR') #=> "CAESAR"
7
+ # Caesar.encode('R', 'CAESAR') #=> "TRVJRI"
8
+ #
9
+ # Caesar.decode('A', 'CAESAR') #=> "CAESAR"
10
+ # Caesar.decode('R', 'TRVJRI') #=> "CAESAR"
11
+ #
12
+
13
+ module Caesar
14
+ A_OFFSET = 65 #'A'.unpack('C').first
15
+ Z_OFFSET = 90 #'Z'.unpack('C').first
16
+
17
+ def Caesar.encode(key, plain_text)
18
+ key_offset = key.upcase.unpack('C').first
19
+
20
+ cipher_text = plain_text.upcase.split('').collect do |letter|
21
+ cipher_letter = (letter.unpack('C').first + key_offset - A_OFFSET)
22
+ if cipher_letter > Z_OFFSET
23
+ cipher_letter -= ( Z_OFFSET - A_OFFSET + 1 )
24
+ end
25
+ cipher_letter.chr
26
+ end
27
+
28
+ return cipher_text.join
29
+ end
30
+
31
+ def Caesar.decode(key, cipher_text)
32
+ key_offset = key.upcase.unpack('C').first
33
+
34
+ plain_text = cipher_text.split('').collect do |cipher_letter|
35
+ if !('A'..'Z').include?(cipher_letter)
36
+ cipher_letter
37
+ else
38
+ if cipher_letter.unpack('C').first >= key_offset
39
+ letter = cipher_letter.unpack('C').first - key_offset
40
+ else
41
+ letter = (cipher_letter.unpack('C').first + (Z_OFFSET - A_OFFSET + 1)) - key_offset
42
+ end
43
+ letter += A_OFFSET
44
+ letter.chr
45
+ end
46
+ end
47
+
48
+ return plain_text.join
49
+ end
50
+ end
51
+
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: caesar
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: "0.3"
6
+ platform: ruby
7
+ authors:
8
+ - Roberto Decurnex
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-18 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: A simple Caesar Cipher ruby implementation
17
+ email: nex.development@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README.textile
26
+ - lib/caesar.rb
27
+ homepage: http://robertodecurnex.github.com/caesar
28
+ licenses: []
29
+
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.8.5
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: caesar-0.1
54
+ test_files: []
55
+