Sha256: e06b0fec514c74c4feafc6bf5ca13c5d9b4fdda24721228e6f125ba81235c9ce

Contents?: true

Size: 871 Bytes

Versions: 3

Compression:

Stored size: 871 Bytes

Contents

require 'rubygems'
require 'openssl'

class Huami

  STR1 = "snow"
  STR2 = "kise"
  STR3 = "sunlovesnow1990090127xykab"

  def self.huami(key, password)
    md5one    = md5_hmac(key, password)
    md5two    = md5_hmac(STR1, md5one)
    md5three  = md5_hmac(STR2, md5one)

    # 转换大小写
    rule    = md5three.split('')
    source  = md5two.split('')
    for i in (0..31)
      if STR3.include? rule[i]
        source[i] = source[i].upcase
      end
    end

    # 保证首字符为字母
    if is_digit(source[0])
      code16 = "K" + source[1..15].join()
    else
      code16 = source[0..15].join()
    end

    return code16
  end

  def self.md5_hmac(key, password)
    digest = OpenSSL::Digest::Digest.new('md5')
    return OpenSSL::HMAC.hexdigest(digest, key, password)
  end

  def self.is_digit(string)
    return string.strip =~ /^[0-9]$/
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
huami-1.0.3 lib/huami.rb
huami-1.0.2 lib/huami.rb
huami-1.0.1 lib/huami.rb