string-encrypt 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +16 -0
- data/bin/decrypt.rb +75 -0
- data/bin/decrypt_all.rb +7 -0
- data/bin/encrypt.rb +109 -0
- data/bin/encrypt_all.rb +7 -0
- data/bin/journal.rb +28 -0
- data/lib/string-encrypt.rb +189 -0
- metadata +69 -0
data/README
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
The string_encryption gem was started with the intention of being
|
2
|
+
compatible with the RSA and AES algorithms used in a javascript
|
3
|
+
library on http://www.pidder.com/pidcrypt . Usage and testing
|
4
|
+
against the pidcrypt library hasn't been done yet, but is scheduled
|
5
|
+
for the future.
|
6
|
+
The intent of this library is to make encryption and decryption of a
|
7
|
+
string as straight forward as capitalizing or reversing is.
|
8
|
+
|
9
|
+
To encrypt a string:
|
10
|
+
encrypted_secret = "Super Secret Text".encrypt("Super Secret Password")
|
11
|
+
To decrypt a string:
|
12
|
+
decrypted_secret = encrypted_secret.encrypt("Super Secret Password")
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
Branden Giacoletto
|
data/bin/decrypt.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'string-encrypt'
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
options = {}
|
6
|
+
if ARGV.length == 1
|
7
|
+
options["infile"] = options["outfile"] = ARGV[0]
|
8
|
+
else
|
9
|
+
OptionParser.new do |opts|
|
10
|
+
opts.banner = "Usage: decrypt.rb -i input.file -o output.file"
|
11
|
+
opts.on("-i", "--infile INPUT", "File to be encrypted") do |input|
|
12
|
+
options["infile"] = input.gsub("\"","")
|
13
|
+
end
|
14
|
+
|
15
|
+
opts.on("-o", "--outfile OUTPUT", "File after it\'s encrypted") do |output|
|
16
|
+
options["outfile"] = output.gsub("\"","")
|
17
|
+
end
|
18
|
+
opts.on("-p", "--password PASSWORD", "") do |pass|
|
19
|
+
options["password"] = pass
|
20
|
+
end
|
21
|
+
opts.on("-k","--key-file KEYFILE", "") do |keyfile|
|
22
|
+
options["key"] = keyfile
|
23
|
+
end
|
24
|
+
opts.on("-z", "--zip", "") do
|
25
|
+
options["zip"] = true
|
26
|
+
end
|
27
|
+
end.parse!
|
28
|
+
end
|
29
|
+
password = ""
|
30
|
+
|
31
|
+
if options["key"] != nil then
|
32
|
+
if options["password"] == nil then password_provided = false end
|
33
|
+
begin
|
34
|
+
options["password"] = rsa_key(options["key"], options["password"])
|
35
|
+
rescue
|
36
|
+
if options["infile"] != nil then
|
37
|
+
STDERR.print "What\'s the password?: "
|
38
|
+
password = STDIN.gets.chomp
|
39
|
+
options["password"] = rsa_key(options["key"],password)
|
40
|
+
else
|
41
|
+
STDERR.print "key file may be encrypted. Enter the password either with\
|
42
|
+
the -p option or read the file to be decrypted with the -i option"
|
43
|
+
# Considered reading the file to be decrypted in, but maybe getting a broken
|
44
|
+
# pipe error is more desirable
|
45
|
+
exit(1)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
if options["infile"] == nil || options["infile"] == "-" then
|
51
|
+
file = ARGF
|
52
|
+
if options["password"] != nil then
|
53
|
+
password = options["password"]
|
54
|
+
end
|
55
|
+
else
|
56
|
+
file = File.open(options["infile"],"rb")
|
57
|
+
if options["password"] != nil then
|
58
|
+
password = options["password"]
|
59
|
+
else
|
60
|
+
STDERR.print "What\'s the password?: "
|
61
|
+
password = STDIN.gets.chomp
|
62
|
+
end
|
63
|
+
end
|
64
|
+
string = file.read
|
65
|
+
decrypted = string.decrypt(password,options["zip"])
|
66
|
+
file.close
|
67
|
+
if decrypted == nil then raise 'decryption failed!'; exit 3 end
|
68
|
+
|
69
|
+
if options["outfile"] == nil || options["outfile"] == "-" then
|
70
|
+
print decrypted
|
71
|
+
#puts "no file to output, wrote to screen"
|
72
|
+
else
|
73
|
+
File.open(options["outfile"],"wb") {|f| f << decrypted }
|
74
|
+
#puts "opened file #{options["outfile"]} for output"
|
75
|
+
end
|
data/bin/decrypt_all.rb
ADDED
data/bin/encrypt.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# encrypt.rb is a program for encrypting an individual file or piped input
|
4
|
+
# using either a password or rsa key. If the key is beyond the allowed size
|
5
|
+
# for the contents being encrypted it is silently symmetrically encrypted
|
6
|
+
# with a random password and that random password is instead encrypted with
|
7
|
+
# the rsa key
|
8
|
+
#
|
9
|
+
# USAGE:: encrypt.rb ([-i input/filename] [-o output/filename] [(-k key/filename) || -p password || -p "pass phrase"]) || filename_changed_in_place
|
10
|
+
#
|
11
|
+
# -i:: Input file name
|
12
|
+
# -o:: Output file name
|
13
|
+
# -k:: RSA public or private key to encrypt with
|
14
|
+
# -p:: a password or pass phrase to encrypt with
|
15
|
+
#
|
16
|
+
# If no input is specified then input is taken from STDIN so a password or key
|
17
|
+
# must be provided at the time of invocation with the -k or -p options
|
18
|
+
# If not then an empty string is used for the password (NOT ADVISABLE)
|
19
|
+
#
|
20
|
+
# If no output is specified then the output is directed to STDOUT. if no
|
21
|
+
# password or key is provided you will be prompted for a password.
|
22
|
+
#
|
23
|
+
# If the input and output file are the same you can optionally pass the
|
24
|
+
# filename as the only parameter and then you will be prompted for a password
|
25
|
+
|
26
|
+
require 'string-encrypt'
|
27
|
+
require 'optparse'
|
28
|
+
|
29
|
+
options = {}
|
30
|
+
if ARGV.length == 1 then
|
31
|
+
options["outfile"] = options["infile"] = ARGV[0]
|
32
|
+
else
|
33
|
+
OptionParser.new do |opts|
|
34
|
+
opts.banner = "Usage: encrypt.rb -i input.file -o output.file"
|
35
|
+
opts.on("-i", "--infile INPUT", "File to be encrypted") do |input|
|
36
|
+
options["infile"] = input.gsub("\"","")
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on("-o", "--outfile OUTPUT", "File after it\'s encrypted") do |output|
|
40
|
+
options["outfile"] = output.gsub("\"","")
|
41
|
+
end
|
42
|
+
opts.on("-p", "--password PASSWORD", "") do |password|
|
43
|
+
options["password"] = password
|
44
|
+
end
|
45
|
+
opts.on("-k", "--key-file KEYFILE", "") do |keyfile|
|
46
|
+
options["key"] = keyfile
|
47
|
+
end
|
48
|
+
opts.on("-z","--zip","") do
|
49
|
+
options["zip"] = true
|
50
|
+
end
|
51
|
+
end.parse!
|
52
|
+
end
|
53
|
+
|
54
|
+
password = ""
|
55
|
+
|
56
|
+
if options["key"] != nil then
|
57
|
+
if options["password"] == nil then password_provided = false end
|
58
|
+
begin
|
59
|
+
options["password"] = rsa_key(options["key"], options["password"])
|
60
|
+
rescue
|
61
|
+
if options["infile"] != nil then
|
62
|
+
STDERR.print "What\'s the password?: "
|
63
|
+
password = STDIN.gets.chomp
|
64
|
+
options["password"] = rsa_key(options["key"],password)
|
65
|
+
else
|
66
|
+
STDERR.puts "key file may be encrypted, provide the password with -p option\
|
67
|
+
read the file with -i instead of through a pipe."
|
68
|
+
#raise "key file may be encrypted"
|
69
|
+
exit(1)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
if options["infile"] == nil || options["infile"] == "-" then
|
75
|
+
f = ARGF
|
76
|
+
if options["password"] != nil then
|
77
|
+
password = options["password"]
|
78
|
+
end
|
79
|
+
#puts "no file, reading from prompt"
|
80
|
+
else
|
81
|
+
f = File.open(options["infile"],"rb")
|
82
|
+
if options["password"] != nil then
|
83
|
+
password = options["password"]
|
84
|
+
else
|
85
|
+
STDERR.print "What\'s the password?: "
|
86
|
+
password = STDIN.gets.chomp
|
87
|
+
end
|
88
|
+
#puts "opened file #{options["infile"]} for reading"
|
89
|
+
#puts.flush
|
90
|
+
end
|
91
|
+
string = f.read
|
92
|
+
f.close
|
93
|
+
if string.length == 0 then raise 'can not encrypt nothing'; exit 2 end
|
94
|
+
|
95
|
+
encrypted = string.encrypt(password,options["zip"])
|
96
|
+
# if it fails once, try again
|
97
|
+
if encrypted == nil then
|
98
|
+
encrypted = string.encrypt(password,options["zip"])
|
99
|
+
end
|
100
|
+
# if it fails twice, quit with an error
|
101
|
+
if encrypted == nil then raise 'Could not encrypt successfully'; exit 1 end
|
102
|
+
|
103
|
+
if options["outfile"] == nil || options["outfile"] == "-" then
|
104
|
+
print encrypted
|
105
|
+
#puts "no file to output, wrote to screen"
|
106
|
+
else
|
107
|
+
File.open(options["outfile"],"wb") {|f| f << encrypted }
|
108
|
+
#puts "opened file #{options["outfile"]} for output"
|
109
|
+
end
|
data/bin/encrypt_all.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
print "What\'s the password?: "
|
4
|
+
password = gets
|
5
|
+
files = Dir::entries('.').collect {|entry| if File.file? entry then entry else nil end }.compact
|
6
|
+
|
7
|
+
files.each { |file| if file != "decrypt.rb" && file != "decrypt_all.rb" then `encrypt -i "#{file}" -o "#{file}" -p "#{password}" -z` end }
|
data/bin/journal.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# journal.rb is a stand-alone program that
|
4
|
+
# 1. decrypts the journal file using the private key that's been symetrically encrypted with a password.
|
5
|
+
# 2. opens the decrypted journal file with vim
|
6
|
+
# 3. then encrypts the edited file back with the public key
|
7
|
+
|
8
|
+
if ARGV.length == 0 then
|
9
|
+
filename = "journal.txt"
|
10
|
+
else
|
11
|
+
filename = ARGV[0]
|
12
|
+
end
|
13
|
+
if File.exists? filename then
|
14
|
+
system("decrypt -i rsa.priv -o tmp_priv.pem")
|
15
|
+
`decrypt -i #{filename} -o #{filename}.tmp -z -k tmp_priv.pem`
|
16
|
+
system "clear"
|
17
|
+
`rm tmp_priv.pem`
|
18
|
+
if File.exists? "#{filename}.tmp" then
|
19
|
+
`echo $(date) >> #{filename}.tmp`
|
20
|
+
system("vim #{filename}.tmp")
|
21
|
+
`encrypt -i #{filename}.tmp -o #{filename} -z -k rsa.pub`
|
22
|
+
`rm #{filename}.tmp`
|
23
|
+
else
|
24
|
+
puts "decryption failed"
|
25
|
+
end
|
26
|
+
else
|
27
|
+
puts "file does not exists"
|
28
|
+
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# == Synopsis
|
3
|
+
# The encryption.rb library simplifies the creation and loading of RSA keys
|
4
|
+
# along with encrypting/decrypting strings using the RSA keys or AES-256 password
|
5
|
+
# with salt. Encryption/Decryption is simplified by opening the String class with
|
6
|
+
# a encrypt and decrypt method and one for rsa keys (encryptr/decryptr) which are
|
7
|
+
# called automatically from the former methods if the password argument is an RSA
|
8
|
+
# key. To reduce the size of the resulting encrypted file it can optionally be
|
9
|
+
# compressed before encryption using encryptz/decryptz methods.
|
10
|
+
# == Usage
|
11
|
+
# * encrypted_string = "string to encrypt with AES-256".encrypt("super secret password")
|
12
|
+
# * key = rsa_key(1024);
|
13
|
+
# encrypted_string = "string to encrypt with rsa key".encryptr(key.public_key)
|
14
|
+
# or
|
15
|
+
# encrypted_string = "string to encrypt with rsa key".encrypt(key.public_key)
|
16
|
+
# * encrypted_string = "string to compress then encrypt".encryptz("super secret password")
|
17
|
+
# [Note] decryption is done with the corresponding decrypt/decryptr/decryptz methods.
|
18
|
+
# [Note] if you encrypted with a public key like above, you decrypt with the private (master) key
|
19
|
+
# (either key or key.private_key). If you encrypted with the private (master) key you can
|
20
|
+
# decrypt with either the private or the public key (preferably the public key, but it's your choice)
|
21
|
+
# [Note] if the RSA key to use is in a file use: key = rsa_key("public_key_file.pub") or key = rsa_key("private_key_file.pub")
|
22
|
+
#
|
23
|
+
# == Author
|
24
|
+
# Branden Giacoletto, Carbondata Digital Services
|
25
|
+
#
|
26
|
+
# == Copyright
|
27
|
+
# Copyright (c) 2009 Carbondata Digital Services
|
28
|
+
# Licensed under the same terms as Ruby
|
29
|
+
|
30
|
+
require 'openssl'
|
31
|
+
require 'zlib'
|
32
|
+
require 'yaml'
|
33
|
+
# require 'base64'
|
34
|
+
|
35
|
+
# rsa key will either create a new RSA key if a bit size is supplied (multiples of 1024, 15 is supposed to be equivalent to AES-256) or
|
36
|
+
# the filename of an already created key.
|
37
|
+
# If a password is given then the rsa file will be decrypted.
|
38
|
+
def rsa_key(bitsize_or_filename,password = nil)
|
39
|
+
if bitsize_or_filename.class.to_s == "String" && password == nil
|
40
|
+
return OpenSSL::PKey::RSA.new(File.read(bitsize_or_filename))
|
41
|
+
elsif bitsize_or_filename.class.to_s == "String" && password != nil
|
42
|
+
return OpenSSL::PKey::RSA.new(File.read(bitsize_or_filename).decrypt(password))
|
43
|
+
elsif bitsize_or_filename.class.to_s != "String" && password == nil then
|
44
|
+
return OpenSSL::PKey::RSA.new(bitsize_or_filename)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Opens the String class providing encryption and zipping methods
|
49
|
+
class String
|
50
|
+
@@magic = "Salted__"
|
51
|
+
@@salt_len = 8
|
52
|
+
# decrypts the string using either and string password or RSA key created with rsa_key()
|
53
|
+
# =====example
|
54
|
+
# * <tt> "string to decrypt".decrypt("super secret password")</tt> # using a string for a password
|
55
|
+
# * <tt> "string to decrypt".decrypt(key.public_key)</tt> # using the public key
|
56
|
+
# * <tt> "string to decrypt".decrypt(key.private_key)</tt> # using the private key
|
57
|
+
# * <tt> "string to decrypt".decrypt(key)</tt> # using the private key unless specifically loaded the public key
|
58
|
+
#
|
59
|
+
# if true is passed for the second argument then the string is decompressed after it is decrypted
|
60
|
+
def decrypt(password = "", unzip_it = false)
|
61
|
+
if password.class.to_s == "OpenSSL::PKey::RSA" then
|
62
|
+
result = nil
|
63
|
+
begin
|
64
|
+
result = self.decryptr(password)
|
65
|
+
rescue
|
66
|
+
enc_password_size = self[0...6].to_i
|
67
|
+
enc_password = self[6...(enc_password_size + 6)]
|
68
|
+
message = self[(enc_password_size + 6)..-1]
|
69
|
+
random_pass = (enc_password).decryptr(password)
|
70
|
+
decrypted_data = message.decrypt(random_pass)
|
71
|
+
result = decrypted_data
|
72
|
+
end
|
73
|
+
if unzip_it == true then result = result.unzip end
|
74
|
+
return result
|
75
|
+
end
|
76
|
+
salt = ""
|
77
|
+
if !self.is_encrypted?
|
78
|
+
return nil # Salt is wrong
|
79
|
+
end
|
80
|
+
salt = self[(@@magic.length)...(@@salt_len+@@magic.length)]
|
81
|
+
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
|
82
|
+
c.decrypt
|
83
|
+
c.pkcs5_keyivgen(password,salt,1)
|
84
|
+
result = nil
|
85
|
+
begin
|
86
|
+
result = (c.update(self[@@salt_len+@@magic.length..-1]) + c.final)
|
87
|
+
if unzip_it == true then result = result.unzip end
|
88
|
+
rescue
|
89
|
+
result = nil
|
90
|
+
end
|
91
|
+
return result
|
92
|
+
end
|
93
|
+
|
94
|
+
# encrypts the string using either and string password or RSA key created with rsa_key()
|
95
|
+
# =====example
|
96
|
+
# * <tt> "string to encrypt".encrypt("super secret password")</tt> # using a string for a password
|
97
|
+
# * <tt> "string to encrypt".encrypt(key.public_key)</tt> # using the public key
|
98
|
+
# * <tt> "string to encrypt".encrypt(key.private_key)</tt> # using the private key
|
99
|
+
# * <tt> "string to encrypt".encrypt(key)</tt> # using the private key unless specifically loaded the public key
|
100
|
+
#
|
101
|
+
# if true is passed for the second argument then the string is compressed before it is encrypted
|
102
|
+
# =====note if an RSA key is provided for encryption but the string to be encrypted is too long, then a temporary, random AES-256 key is created to encrypt the string, then that password is encrypted with the RSA key
|
103
|
+
def encrypt(password = "", zipit = false)
|
104
|
+
if password.class.to_s == "OpenSSL::PKey::RSA" then
|
105
|
+
result = nil
|
106
|
+
begin
|
107
|
+
result = (if zipit then self.zip else self end).encryptr(password)
|
108
|
+
rescue
|
109
|
+
enc_password_size = 0
|
110
|
+
random_pass = OpenSSL::Random.random_bytes(117)
|
111
|
+
rand_enc_password = (random_pass.encryptr(password))
|
112
|
+
enc_password_size = rand_enc_password.length.to_s.ljust(6)
|
113
|
+
result = enc_password_size + rand_enc_password + (if zipit then self.zip else self end).encrypt(random_pass)
|
114
|
+
end
|
115
|
+
return result
|
116
|
+
end
|
117
|
+
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
|
118
|
+
salt = (0...(@@salt_len)).inject(""){ |carry,num| carry += rand(256).chr }
|
119
|
+
c.encrypt
|
120
|
+
c.pkcs5_keyivgen(password,salt,1)
|
121
|
+
result = nil
|
122
|
+
begin
|
123
|
+
result = @@magic + salt + c.update(if zipit then self.zip else self end) + c.final
|
124
|
+
rescue
|
125
|
+
result = nil
|
126
|
+
end
|
127
|
+
# make sure it can be successfully decrypted
|
128
|
+
if self.sha != result.decrypt(password,zipit).sha then result = nil end
|
129
|
+
return result
|
130
|
+
end
|
131
|
+
|
132
|
+
# encrypts the string specifically with a RSA key. Is called from encrypt if a key is passed for the password
|
133
|
+
def encryptr(key)
|
134
|
+
if (key.to_s =~ /^-----BEGIN (RSA|DSA) PRIVATE KEY-----$/).nil?
|
135
|
+
return key.public_encrypt(self)
|
136
|
+
else
|
137
|
+
return key.private_encrypt(self)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# decrypts the string specifically with a RSA key. Is called from decrypt if a key is passed for the password
|
142
|
+
def decryptr(key)
|
143
|
+
if (key.to_s =~ /^-----BEGIN (RSA|DSA) PRIVATE KEY-----$/).nil?
|
144
|
+
return key.public_decrypt(self)
|
145
|
+
else
|
146
|
+
begin
|
147
|
+
result = nil
|
148
|
+
result = key.private_decrypt(self)
|
149
|
+
rescue
|
150
|
+
result = key.public_decrypt(self)
|
151
|
+
end
|
152
|
+
return result
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# Returns the sha1 hash of the string as a character string
|
157
|
+
def sha
|
158
|
+
return OpenSSL::Digest::Digest.new('sha1',self).to_s
|
159
|
+
end
|
160
|
+
|
161
|
+
# checks for the salt string as the magic string at the beginning of the string. If present then it must be encrypted.
|
162
|
+
def is_encrypted?
|
163
|
+
if self[0...(@@magic.length)] == @@magic
|
164
|
+
return true
|
165
|
+
else
|
166
|
+
return false
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
# compresses the string using zlib
|
171
|
+
def zip
|
172
|
+
return Zlib::Deflate.deflate(self,Zlib::BEST_COMPRESSION)
|
173
|
+
end
|
174
|
+
|
175
|
+
# decompresses the string that was previously compressed with zip
|
176
|
+
def unzip
|
177
|
+
return Zlib::Inflate.inflate(self)
|
178
|
+
end
|
179
|
+
|
180
|
+
# compresses and encrypts the string
|
181
|
+
def encryptz(password="")
|
182
|
+
return self.zip.encrypt(password)
|
183
|
+
end
|
184
|
+
|
185
|
+
# uncompresses and decrypts the string
|
186
|
+
def decryptz(password="")
|
187
|
+
return self.decrypt(password).unzip
|
188
|
+
end
|
189
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: string-encrypt
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Branden Giacoletto
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-05-12 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: branden@rubyforge.com
|
18
|
+
executables:
|
19
|
+
- journal.rb
|
20
|
+
- encrypt.rb
|
21
|
+
- encrypt_all.rb
|
22
|
+
- decrypt.rb
|
23
|
+
- decrypt_all.rb
|
24
|
+
extensions: []
|
25
|
+
|
26
|
+
extra_rdoc_files:
|
27
|
+
- bin/journal.rb
|
28
|
+
- bin/encrypt.rb
|
29
|
+
- bin/encrypt_all.rb
|
30
|
+
- bin/decrypt.rb
|
31
|
+
- bin/decrypt_all.rb
|
32
|
+
- README
|
33
|
+
- lib/string-encrypt.rb
|
34
|
+
files:
|
35
|
+
- bin/journal.rb
|
36
|
+
- bin/encrypt.rb
|
37
|
+
- bin/encrypt_all.rb
|
38
|
+
- bin/decrypt.rb
|
39
|
+
- bin/decrypt_all.rb
|
40
|
+
- lib/string-encrypt.rb
|
41
|
+
- README
|
42
|
+
has_rdoc: true
|
43
|
+
homepage: http://string-encrypt.rubyforge.com
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
rubyforge_project: string-encrypt
|
64
|
+
rubygems_version: 1.3.1
|
65
|
+
signing_key:
|
66
|
+
specification_version: 2
|
67
|
+
summary: String open classed with AES-256 and RSA encryption and zipping methods for easy, secure, encryption of strings
|
68
|
+
test_files: []
|
69
|
+
|