weixin_message_encryptor 0.1.0 → 0.1.0.1
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/lib/weixin_message_encryptor.rb +21 -16
- data/lib/weixin_message_encryptor/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6049b7499b256402b46ba5a334a17da04973d3d
|
4
|
+
data.tar.gz: 50e24af04daa67cf41f71a9bb5c0eb4ef4d2c7e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2020b76bcd5a7af06b99e81981b1b3e449d541838010c46dc9d3f920b76dbf4a1a5d813f58255f0229f588899c2a361c999f254f17f58088b4f47cd554c2a848
|
7
|
+
data.tar.gz: 7078ee2f92369d1929b2e32a07cc33ca9806ad4726f07cb329cb47ea0f6010758a731ea2e19590e9b1868a71044d908839a5cda36d6ffc7959a637798b712e91
|
@@ -17,27 +17,19 @@ class WeixinMessageEncryptor
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def encrypt(payload)
|
20
|
-
|
21
|
-
encrypted_message(encrypted_payload)
|
20
|
+
aes_encrypt(payload).delete("\n")
|
22
21
|
end
|
23
22
|
|
24
|
-
def
|
25
|
-
encrypted_payload = payload
|
26
|
-
sign = generate_signature encrypted_payload, payload['timestamp'], payload['nonce']
|
27
|
-
message, app_id = decrypt_payload encrypted_payload
|
28
|
-
return message, app_id, sign
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def aes_key
|
34
|
-
@aes_key ||= Base64.decode64 encoding_aes_key + '='
|
35
|
-
end
|
36
|
-
|
37
|
-
def encrypted_message(encrypted_payload)
|
23
|
+
def encrypt_with_signature(payload)
|
24
|
+
encrypted_payload = encrypt(payload)
|
38
25
|
timestamp = Time.now.to_i.to_s
|
39
26
|
nonce = SecureRandom.hex(8)
|
40
27
|
signature = generate_signature(encrypted_payload, timestamp, nonce)
|
28
|
+
return [encrypted_payload, timestamp, nonce, signature]
|
29
|
+
end
|
30
|
+
|
31
|
+
def encrypt_to_xml(payload)
|
32
|
+
encrypted_payload, timestamp, nonce, signature = encrypt_with_signature(payload)
|
41
33
|
<<XML
|
42
34
|
<xml>
|
43
35
|
<Encrypt><![CDATA[#{encrypted_payload}]]></Encrypt>
|
@@ -48,6 +40,19 @@ class WeixinMessageEncryptor
|
|
48
40
|
XML
|
49
41
|
end
|
50
42
|
|
43
|
+
def decrypt(payload)
|
44
|
+
encrypted_payload = payload['echostr'] || payload['xml']['Encrypt']
|
45
|
+
sign = generate_signature encrypted_payload, payload['timestamp'], payload['nonce']
|
46
|
+
message, app_id = decrypt_payload encrypted_payload
|
47
|
+
return message, app_id, sign
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def aes_key
|
53
|
+
@aes_key ||= Base64.decode64 encoding_aes_key + '='
|
54
|
+
end
|
55
|
+
|
51
56
|
def decrypt_payload(encrypted_payload)
|
52
57
|
text = Base64.decode64 encrypted_payload
|
53
58
|
text = handle_cipher(:decrypt, text)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weixin_message_encryptor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- FENG Zhichao
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
122
|
+
rubygems_version: 2.6.14
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: A simple tool to decrypt and encrypt Weixin messages.
|