wechat-callback 0.2 → 0.3
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/CHANGELOG.md +4 -0
- data/lib/wechat/callback.rb +3 -0
- data/lib/wechat/callback/random_byte_array.rb +9 -0
- data/lib/wechat/callback/secure_message.rb +46 -0
- data/lib/wechat/callback/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abe8b742f4d7992685d0be99900192815cf46f4f
|
4
|
+
data.tar.gz: e3f8689b852a2fb649e0d334498b983698982934
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b2588006ae7d1c992252d1cacaa220c5fd3ea6add64a003cff401851dae98b76461213e1f2830e6c0df206a7de03faaec2eae078a6cd70c6c86fe75a2e66319
|
7
|
+
data.tar.gz: 1d1d278dfdee0101ebc72da2d1be2171ae3d5485b187a04b1f211a59c683d2c62da3908f511e0d4f6d33b9d96a5df67c6d870cf95e4d279c1f276e5c000ad68a
|
data/CHANGELOG.md
CHANGED
data/lib/wechat/callback.rb
CHANGED
@@ -7,6 +7,9 @@ require 'wechat/callback/xml_document'
|
|
7
7
|
require 'wechat/callback/message_decryption'
|
8
8
|
require 'wechat/callback/message_encryption'
|
9
9
|
|
10
|
+
require 'wechat/callback/random_byte_array'
|
11
|
+
require 'wechat/callback/secure_message'
|
12
|
+
|
10
13
|
module Wechat
|
11
14
|
module Callback
|
12
15
|
# Your code goes here...
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class Wechat::Callback::SecureMessage
|
2
|
+
|
3
|
+
RANDOM_LENGTH = 16
|
4
|
+
XML_SIZE_LENGTH = 4
|
5
|
+
|
6
|
+
# 消息加解密
|
7
|
+
# http://mp.weixin.qq.com/wiki/6/90f7259c0d0739bbb41d9f4c4c8e59a2.html
|
8
|
+
#
|
9
|
+
# random(16B) + msg_len(4B) + msg + $AppId + padding
|
10
|
+
# padding: AES采用CBC模式,秘钥长度为32个字节,数据采用PKCS#7填充;PKCS#7:K为秘钥字节数(采用32),buf为待加密的内容,N为其字节数。Buf需要被填充为K的整数倍。在buf的尾部填充(K-N%K)个字节,每个字节的内容是(K- N%K);
|
11
|
+
# 去掉rand_msg头部的16个随机字节,4个字节的msg_len,和尾部的$AppId即为最终的xml消息体
|
12
|
+
def self.load(message_decryption)
|
13
|
+
|
14
|
+
random_bytes = message_decryption[0..(RANDOM_LENGTH-1)].bytes
|
15
|
+
xml_size = message_decryption[RANDOM_LENGTH..(RANDOM_LENGTH+XML_SIZE_LENGTH-1)].reverse.unpack('l').first
|
16
|
+
|
17
|
+
text_decryption = message_decryption.bytes[(RANDOM_LENGTH+XML_SIZE_LENGTH)..(message_decryption.length-1)]
|
18
|
+
xml_text = byte_array_to_string text_decryption[0..(xml_size-1)]
|
19
|
+
|
20
|
+
padding_length = message_decryption.last.unpack('C').first
|
21
|
+
app_id = byte_array_to_string text_decryption[xml_size..(text_decryption.length-1-padding_length)]
|
22
|
+
padding_bytes = text_decryption[(text_decryption.length-padding_length)..(text_decryption.length-1)]
|
23
|
+
|
24
|
+
[ random_bytes, xml_size, xml_text, app_id, padding_bytes ]
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
# 消息加解密
|
29
|
+
# http://mp.weixin.qq.com/wiki/6/90f7259c0d0739bbb41d9f4c4c8e59a2.html
|
30
|
+
#
|
31
|
+
# random(16B) + msg_len(4B) + msg + $AppId + padding
|
32
|
+
# padding: AES采用CBC模式,秘钥长度为32个字节,数据采用PKCS#7填充;PKCS#7:K为秘钥字节数(采用32),buf为待加密的内容,N为其字节数。Buf需要被填充为K的整数倍。在buf的尾部填充(K-N%K)个字节,每个字节的内容是(K- N%K);
|
33
|
+
# 去掉rand_msg头部的16个随机字节,4个字节的msg_len,和尾部的$AppId即为最终的xml消息体
|
34
|
+
def self.create(random_bytes, xml_text, app_id)
|
35
|
+
xml_size_bytes = [ xml_text.bytes.length ].pack('l').reverse.bytes
|
36
|
+
buffer = random_bytes+xml_size_bytes+xml_text.bytes+app_id.bytes
|
37
|
+
padding_length = 32-buffer.length%32
|
38
|
+
buffer += [ padding_length ]*padding_length
|
39
|
+
byte_array_to_string buffer
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.byte_array_to_string(bytes)
|
43
|
+
bytes.inject('') do |buffer, byte| buffer += [ byte ].pack 'C' end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wechat-callback
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Topbit Du
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -90,6 +90,8 @@ files:
|
|
90
90
|
- lib/wechat/callback/message_decryption.rb
|
91
91
|
- lib/wechat/callback/message_encryption.rb
|
92
92
|
- lib/wechat/callback/message_signature.rb
|
93
|
+
- lib/wechat/callback/random_byte_array.rb
|
94
|
+
- lib/wechat/callback/secure_message.rb
|
93
95
|
- lib/wechat/callback/signature.rb
|
94
96
|
- lib/wechat/callback/version.rb
|
95
97
|
- lib/wechat/callback/xml_document.rb
|