Module: QyWechat::Prpcrypt

Extended by:
Prpcrypt
Included in:
Prpcrypt
Defined in:
lib/qy_wechat/helpers/prpcrypt.rb

Instance Method Summary collapse

Instance Method Details

#decrypt(aes_key, text, corpid) ⇒ Object

对密文进行解密. text 需要解密的密文



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/qy_wechat/helpers/prpcrypt.rb', line 8

def decrypt(aes_key, text, corpid)
  status = 200
  text        = Base64.decode64(text)
  text        = handle_cipher(:decrypt, aes_key, text)
  result      = PKCS7Encoder.decode(text)
  content     = result[16...result.length]
  len_list    = content[0...4].unpack("N")
  xml_len     = len_list[0]
  xml_content = content[4...4 + xml_len]
  from_corpid = content[xml_len+4...content.size]
  # TODO: refactor
  if corpid != from_corpid
    Rails.logger.debug("#{__FILE__}:#{__LINE__} Failure because corpid != from_corpid")
    status = 401
  end
  [xml_content, status]
end

#encrypt(aes_key, text, corpid) ⇒ Object

加密



27
28
29
30
31
32
33
34
35
# File 'lib/qy_wechat/helpers/prpcrypt.rb', line 27

def encrypt(aes_key, text, corpid)
  text    = text.force_encoding("ASCII-8BIT")
  random  = SecureRandom.hex(8)
  msg_len = [text.length].pack("N")
  text    = "#{random}#{msg_len}#{text}#{corpid}"
  text    = PKCS7Encoder.encode(text)
  text    = handle_cipher(:encrypt, aes_key, text)
  Base64.encode64(text)
end