jd_pay 0.1.4 → 0.1.5
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/jd_pay/util/des3.rb +29 -5
- data/lib/jd_pay/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 837a6f9dcd77e67e4566d267e3fb1bd171ccd5dc
|
4
|
+
data.tar.gz: 2732a2061246f1a9a257701fed2787acf57c7769
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ce6e462d2dc150503749c836a4ad291ce97acbdf3906835efc4b7fdaa57abcd13dad4afd5e8e547bbf271ed87b101ec631dd099b808f9b7a1e0b56cb5be627e
|
7
|
+
data.tar.gz: a061020696abe4949b1cb75fa4b17b576cc30bb7583d74a2121cffb7465b234e9d2a173ba4916458bead1297ca0eeae1d2e5f93a28189783d37fcbdaff6885d2
|
data/lib/jd_pay/util/des3.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module JdPay
|
2
2
|
module Util
|
3
|
-
# 京东支付 des3
|
3
|
+
# 京东支付 des3 加解密,掺杂了京东自定义的一些位转移逻辑
|
4
4
|
class Des3
|
5
5
|
def self.encrypt(source, base64_key)
|
6
6
|
key = Base64.decode64(base64_key)
|
@@ -14,6 +14,21 @@ module JdPay
|
|
14
14
|
res.unpack("H*").first
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.decrypt(source, base64_key)
|
18
|
+
key = Base64.decode64(base64_key)
|
19
|
+
b2 = source.chars.each_slice(2).map{|x| x.join().to_i(16) }.map(&:chr).join
|
20
|
+
|
21
|
+
des = OpenSSL::Cipher::Cipher.new('des-ede3')
|
22
|
+
des.decrypt
|
23
|
+
des.key = key
|
24
|
+
des.padding = 0
|
25
|
+
res = des.update(b2) + des.final
|
26
|
+
decrypt_bytes = res.bytes
|
27
|
+
|
28
|
+
bytes_length = bytes_to_int(decrypt_bytes[0, 4])
|
29
|
+
decrypt_bytes[4, 4 + bytes_length].map(&:chr).join
|
30
|
+
end
|
31
|
+
|
17
32
|
# 对要加密的字符串按照京东的规则处理
|
18
33
|
def self.transform_source(source_bytes)
|
19
34
|
source_len = source_bytes.length
|
@@ -21,15 +36,24 @@ module JdPay
|
|
21
36
|
y = x == 0 ? 0 : 8 - x
|
22
37
|
|
23
38
|
result_bytes = []
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
result_bytes << (source_len & 0xFF)
|
39
|
+
0.upto(3).each do |index|
|
40
|
+
result_bytes << ((source_len >> (3 - index) * 8) & 0xFF)
|
41
|
+
end
|
28
42
|
result_bytes += source_bytes
|
29
43
|
y.times { result_bytes << 0 }
|
30
44
|
|
31
45
|
result_bytes.map(&:chr).join
|
32
46
|
end
|
47
|
+
|
48
|
+
# 解密
|
49
|
+
def self.bytes_to_int(bytes)
|
50
|
+
total = 0
|
51
|
+
bytes.each_with_index do |value, index|
|
52
|
+
shift = (3 - index) * 8
|
53
|
+
total += (value & 0xFF) << shift
|
54
|
+
end
|
55
|
+
total
|
56
|
+
end
|
33
57
|
end
|
34
58
|
end
|
35
59
|
end
|
data/lib/jd_pay/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jd_pay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sam
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|