wechat-callback 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|