cryptojs-aes-decrypt 0.1.0 → 1.0.0
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.
- checksums.yaml +4 -4
- data/README.md +9 -1
- data/cryptojs-aes-decrypt.gemspec +5 -2
- data/lib/decrypt/version.rb +4 -0
- data/lib/decrypt.rb +49 -0
- data/test.rb +2 -2
- metadata +6 -4
- data/lib/cryptojs/aes/decrypt/version.rb +0 -7
- data/lib/cryptojs/aes/decrypt.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9f4a4d7c1ac65ccf3cadd229eebdcdb3953ad7e23e47d37776c0af6f9789e2a
|
4
|
+
data.tar.gz: 023c33f306221e80f99bda4a7dc615ef67e6c00ae3b1438fb7b6ed8aba914aeb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3440a48d2bbf73b7085c72a01fa245c5052b93a343c8e48218bf4573706e7065a6279945f049f26a68c963772f38f447511026f9c752b083c0872bdec622f150
|
7
|
+
data.tar.gz: 846bc8bddb9b134bdae721c82d88c0ca9ac20d15b9825477e392626e131b5cb8c75bfaa202e95d1b9eafc48938710f71654570ff7b3f8f73bc68a2d8db63f7f7
|
data/README.md
CHANGED
@@ -20,7 +20,15 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
```ruby
|
24
|
+
require 'cryptojs-aes-decrypt'
|
25
|
+
cipher = 'U2FsdGVkX1/cJw+ISoZKbICgFmoJ+Ehx/atOTgPlt4IOCpmgrHJBY9J2gvoupPbNQs3dHsshX2EljZPlnVLATRJRyF8rOMui+uFMl8DV9I0VVA+1IqecvcP+a2gswGSjYEOiEG9kKQQ8cNlZPtGZdD4ksxxKxm/DhDxquzYX9mWwtMLe0EVYqFd0gncHX2wYzOrvKbMLZlGn/rN70XC+kQgEd47syLFOBm/cjzmVFGvymJfvuRNDl66PRzMtoGqZkQ7uufZuFS3rRUpcsiVv+0XbkSTiaZeD2t7cs+pn4G4uAymMJathk2z2pmhhd184rnXpuooaz8pXPmfdL8CwbQ=='
|
26
|
+
passphrase = 'passcode'
|
27
|
+
expected = '{"id":"0a09a9e1-eee2-4a8e-bf77-901be943621c","key":"WHAT","value":"IS_THIS_NAH","comment":"","addedBy":{"name":"Aleem Isiaka","id":"a3748a40-3ab8-4dd1-bac6-e73c1047c95f"},"addedDate":"April 22, 2022 | 20:09 GMT","method":""}'
|
28
|
+
decrypted = CryptojsAesDecrypt.run(cipher, passphrase)
|
29
|
+
p decrypted == expected
|
30
|
+
|
31
|
+
```
|
24
32
|
|
25
33
|
## Development
|
26
34
|
|
@@ -1,14 +1,15 @@
|
|
1
1
|
|
2
2
|
lib = File.expand_path('lib', __dir__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require '
|
4
|
+
require File.expand_path('lib/decrypt/version', __dir__)
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'cryptojs-aes-decrypt'
|
8
|
-
spec.version =
|
8
|
+
spec.version = CryptojsAesDecrypt::VERSION
|
9
9
|
spec.authors = ['Aleem Isiaka']
|
10
10
|
spec.email = ['aleemisiaka@gmail.com']
|
11
11
|
|
12
|
+
spec.extra_rdoc_files = ['README.md']
|
12
13
|
spec.summary = 'Decrypt Cryptojs AES Ciphers'
|
13
14
|
spec.description = 'Decrypt Cryptojs AES Ciphers'
|
14
15
|
spec.homepage = 'https://github.com/limistah/ruby-cryptojs-aes-decrypt'
|
@@ -17,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
17
18
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
19
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
20
|
if spec.respond_to?(:metadata)
|
21
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
22
|
+
|
20
23
|
spec.metadata['homepage_uri'] = spec.homepage
|
21
24
|
spec.metadata['source_code_uri'] = 'https://github.com/limistah/ruby-cryptojs-aes-decrypt'
|
22
25
|
spec.metadata['changelog_uri'] = 'https://github.com/limistah/ruby-cryptojs-aes-decrypt/CHANGELOG.MD'
|
data/lib/decrypt.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'digest/md5'
|
2
|
+
require 'base64'
|
3
|
+
require 'base64'
|
4
|
+
require 'digest'
|
5
|
+
require 'openssl'
|
6
|
+
|
7
|
+
module CryptojsAesDecrypt
|
8
|
+
class Error < StandardError; end
|
9
|
+
class << self
|
10
|
+
def bytes_to_key(data, salt, output = 48)
|
11
|
+
merged = data + salt
|
12
|
+
key = Digest::MD5.digest(merged)
|
13
|
+
final_key = key
|
14
|
+
while final_key.length < output
|
15
|
+
key = Digest::MD5.digest(key + merged)
|
16
|
+
final_key += key
|
17
|
+
end
|
18
|
+
final_key[0..output - 1]
|
19
|
+
end
|
20
|
+
|
21
|
+
def aes256_cbc_decrypt(key, data, iv)
|
22
|
+
# p key
|
23
|
+
key = Digest::SHA256.digest(key) if key.is_a?(String) && key.bytesize != 32
|
24
|
+
iv = Digest::MD5.digest(iv) if iv.is_a?(String) && iv.bytesize != 16
|
25
|
+
aes = OpenSSL::Cipher.new('AES-256-CBC')
|
26
|
+
aes.decrypt
|
27
|
+
aes.key = key
|
28
|
+
aes.iv = iv
|
29
|
+
aes.update(data) + aes.final
|
30
|
+
end
|
31
|
+
|
32
|
+
def run(cipher, passcode)
|
33
|
+
secret = Base64.decode64(cipher)
|
34
|
+
unless secret[0..7] == 'Salted__'
|
35
|
+
puts 'Invalid encrypted data'
|
36
|
+
exit(1)
|
37
|
+
end
|
38
|
+
decrypt(secret, passcode)
|
39
|
+
end
|
40
|
+
|
41
|
+
def decrypt(secret, passcode)
|
42
|
+
salt = secret[8..15]
|
43
|
+
key_iv = bytes_to_key(passcode, salt, 48)
|
44
|
+
key = key_iv[0..31]
|
45
|
+
iv = key_iv[32..key_iv.length - 1]
|
46
|
+
aes256_cbc_decrypt(key, secret[16..secret.length - 1], iv)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require File.expand_path('lib/
|
1
|
+
require File.expand_path('lib/decrypt', __dir__)
|
2
2
|
|
3
3
|
cipher = 'U2FsdGVkX1/cJw+ISoZKbICgFmoJ+Ehx/atOTgPlt4IOCpmgrHJBY9J2gvoupPbNQs3dHsshX2EljZPlnVLATRJRyF8rOMui+uFMl8DV9I0VVA+1IqecvcP+a2gswGSjYEOiEG9kKQQ8cNlZPtGZdD4ksxxKxm/DhDxquzYX9mWwtMLe0EVYqFd0gncHX2wYzOrvKbMLZlGn/rN70XC+kQgEd47syLFOBm/cjzmVFGvymJfvuRNDl66PRzMtoGqZkQ7uufZuFS3rRUpcsiVv+0XbkSTiaZeD2t7cs+pn4G4uAymMJathk2z2pmhhd184rnXpuooaz8pXPmfdL8CwbQ=='
|
4
4
|
passphrase = 'passcode'
|
5
5
|
expected = '{"id":"0a09a9e1-eee2-4a8e-bf77-901be943621c","key":"WHAT","value":"IS_THIS_NAH","comment":"","addedBy":{"name":"Aleem Isiaka","id":"a3748a40-3ab8-4dd1-bac6-e73c1047c95f"},"addedDate":"April 22, 2022 | 20:09 GMT","method":""}'
|
6
|
-
decrypted =
|
6
|
+
decrypted = CryptojsAesDecrypt.run(cipher, passphrase)
|
7
7
|
p decrypted == expected
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cryptojs-aes-decrypt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aleem Isiaka
|
@@ -57,7 +57,8 @@ email:
|
|
57
57
|
- aleemisiaka@gmail.com
|
58
58
|
executables: []
|
59
59
|
extensions: []
|
60
|
-
extra_rdoc_files:
|
60
|
+
extra_rdoc_files:
|
61
|
+
- README.md
|
61
62
|
files:
|
62
63
|
- ".gitignore"
|
63
64
|
- ".idea/.gitignore"
|
@@ -72,13 +73,14 @@ files:
|
|
72
73
|
- README.md
|
73
74
|
- Rakefile
|
74
75
|
- cryptojs-aes-decrypt.gemspec
|
75
|
-
- lib/
|
76
|
-
- lib/
|
76
|
+
- lib/decrypt.rb
|
77
|
+
- lib/decrypt/version.rb
|
77
78
|
- test.rb
|
78
79
|
homepage: https://github.com/limistah/ruby-cryptojs-aes-decrypt
|
79
80
|
licenses:
|
80
81
|
- MIT
|
81
82
|
metadata:
|
83
|
+
allowed_push_host: https://rubygems.org
|
82
84
|
homepage_uri: https://github.com/limistah/ruby-cryptojs-aes-decrypt
|
83
85
|
source_code_uri: https://github.com/limistah/ruby-cryptojs-aes-decrypt
|
84
86
|
changelog_uri: https://github.com/limistah/ruby-cryptojs-aes-decrypt/CHANGELOG.MD
|
data/lib/cryptojs/aes/decrypt.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'digest/md5'
|
2
|
-
require 'base64'
|
3
|
-
require 'base64'
|
4
|
-
require 'digest'
|
5
|
-
require 'openssl'
|
6
|
-
|
7
|
-
module Cryptojs
|
8
|
-
module Aes
|
9
|
-
module Decrypt
|
10
|
-
class Error < StandardError; end
|
11
|
-
class << self
|
12
|
-
def bytes_to_key(data, salt, output = 48)
|
13
|
-
merged = data + salt
|
14
|
-
key = Digest::MD5.digest(merged)
|
15
|
-
final_key = key
|
16
|
-
while final_key.length < output
|
17
|
-
key = Digest::MD5.digest(key + merged)
|
18
|
-
final_key += key
|
19
|
-
end
|
20
|
-
final_key[0..output - 1]
|
21
|
-
end
|
22
|
-
|
23
|
-
def aes256_cbc_decrypt(key, data, iv)
|
24
|
-
# p key
|
25
|
-
key = Digest::SHA256.digest(key) if key.is_a?(String) && key.bytesize != 32
|
26
|
-
iv = Digest::MD5.digest(iv) if iv.is_a?(String) && iv.bytesize != 16
|
27
|
-
aes = OpenSSL::Cipher.new('AES-256-CBC')
|
28
|
-
aes.decrypt
|
29
|
-
aes.key = key
|
30
|
-
aes.iv = iv
|
31
|
-
aes.update(data) + aes.final
|
32
|
-
end
|
33
|
-
|
34
|
-
def run(cipher, passcode)
|
35
|
-
secret = Base64.decode64(cipher)
|
36
|
-
unless secret[0..7] == 'Salted__'
|
37
|
-
puts 'Invalid encrypted data'
|
38
|
-
exit(1)
|
39
|
-
end
|
40
|
-
decrypt(secret, passcode)
|
41
|
-
end
|
42
|
-
|
43
|
-
def decrypt(secret, passcode)
|
44
|
-
salt = secret[8..15]
|
45
|
-
key_iv = bytes_to_key(passcode, salt, 48)
|
46
|
-
key = key_iv[0..31]
|
47
|
-
iv = key_iv[32..key_iv.length - 1]
|
48
|
-
aes256_cbc_decrypt(key, secret[16..secret.length - 1], iv)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|