module Veritrans::Tercerog::Mdk::AuthHashUtil
パラメータ改竄チェッククラス
パラメータが改竄されているかどうかをチェック機能を提供します。
Public Class Methods
リクエストパラメータ内のパラメータ順序(authParams)に従ってハッシュ値を計算し、¶ ↑
リクエストパラメータ内の改竄チェック用ハッシュ値(vAuthInfo)と比較する。 リクエストパラメータにパラメータ順序と改竄チェック用ハッシュ値が含まれていない場合、 改竄されているとみなす。
- @param
-
request_params リクエストパラメータ
- @param
-
merchant_cc_id マーチャントCCID
- @param
-
merchant_pw マーチャントパスワード
- @param
-
charset 文字コード
- @return
-
true 一致 or false 不一致(改竄されている)
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 31 def check_auth_hash?(request_params, merchant_cc_id, merchant_pw, charset) if request_params.nil? || !request_params.is_a?(Hash) return false end # パラメータ順序の取得 auth_param = self::get_first_value(request_params[:authParams]) if auth_param.nil? return false end # 改竄チェック用ハッシュ値の取得 v_auth_info = self::get_first_value(request_params[:vAuthInfo]) if v_auth_info.nil? return false end begin # ハッシュ値の算出 hash = self::create_auth_hash_info(request_params, auth_param, merchant_cc_id, merchant_pw, charset) if !hash.nil? && hash == v_auth_info return true end rescue => e Veritrans::Tercerog::Mdk::logger.debug("!!!!!!!!!! Error has occurred in create_auth_hash_info()") Veritrans::Tercerog::Mdk::logger.debug(e) Veritrans::Tercerog::Mdk::logger.debug(e.backtrace.join("\n")) end return false end
ハッシュ値を算出する。¶ ↑
- @param
-
request_params リクエストパラメータ
- @param
-
auth_params パラメータ順序
- @param
-
merchant_cc_id マーチャントCCID
- @param
-
merchant_pw マーチャントパスワード
- @param
-
charset 文字コード
- @return
-
ハッシュ値
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 75 def create_auth_hash_info(request_params, auth_params, merchant_cc_id, merchant_pw, charset) if merchant_cc_id.nil? || merchant_pw.nil? return nil end # デコードする。 decoded_params = self::mdk_base64_decode(auth_params) keys = decoded_params.split(',') # パラメータを連結する。 str_params = "" str_params << merchant_cc_id keys.each do |key| value = request_params[key] if value.nil? return nil end str_params << value end str_params << merchant_pw # コンフィグからエンコードを取得する。 config = Veritrans::Tercerog::Mdk::MdkConfig.instance encode = config[:DTO_ENCODE] # 連結したパラメータ値から指定されたアルゴリズムのダイジェストを生成する。 str_params = Veritrans::Tercerog::Mdk::MdkUtils::mdk_encode_from(encode, str_params) return OpenSSL::Digest::SHA256.hexdigest(str_params) end
指定した値に格納された先頭の値を取得する。¶ ↑
・指定した値が配列の場合は、配列の先頭の値を取得する。 ・指定した値が配列ではない場合は、指定した値をそのまま返す。 ・指定した値が空配列である場合はnilを取得する。
- @param
-
value 配列もしくは値
- @return
-
先頭の値
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 116 def get_first_value(value) if !value.nil? and value.is_a?(Array) if 1 <= value.size param = value[0] else param = nil end else return value end return param end
Bese64デコードを行う。¶ ↑
- @param
-
data デコードする文字列
- @return
-
デコードを行った結果の文字列
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 136 def mdk_base64_decode(data) target = data ? data.to_s.dup : "" target.gsub!('*', '=') target.gsub!('-', '/') target.gsub!('_', '+') target.gsub!(' ', '+') return target.unpack('m').first end
Private Instance Methods
リクエストパラメータ内のパラメータ順序(authParams)に従ってハッシュ値を計算し、¶ ↑
リクエストパラメータ内の改竄チェック用ハッシュ値(vAuthInfo)と比較する。 リクエストパラメータにパラメータ順序と改竄チェック用ハッシュ値が含まれていない場合、 改竄されているとみなす。
- @param
-
request_params リクエストパラメータ
- @param
-
merchant_cc_id マーチャントCCID
- @param
-
merchant_pw マーチャントパスワード
- @param
-
charset 文字コード
- @return
-
true 一致 or false 不一致(改竄されている)
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 31 def check_auth_hash?(request_params, merchant_cc_id, merchant_pw, charset) if request_params.nil? || !request_params.is_a?(Hash) return false end # パラメータ順序の取得 auth_param = self::get_first_value(request_params[:authParams]) if auth_param.nil? return false end # 改竄チェック用ハッシュ値の取得 v_auth_info = self::get_first_value(request_params[:vAuthInfo]) if v_auth_info.nil? return false end begin # ハッシュ値の算出 hash = self::create_auth_hash_info(request_params, auth_param, merchant_cc_id, merchant_pw, charset) if !hash.nil? && hash == v_auth_info return true end rescue => e Veritrans::Tercerog::Mdk::logger.debug("!!!!!!!!!! Error has occurred in create_auth_hash_info()") Veritrans::Tercerog::Mdk::logger.debug(e) Veritrans::Tercerog::Mdk::logger.debug(e.backtrace.join("\n")) end return false end
ハッシュ値を算出する。¶ ↑
- @param
-
request_params リクエストパラメータ
- @param
-
auth_params パラメータ順序
- @param
-
merchant_cc_id マーチャントCCID
- @param
-
merchant_pw マーチャントパスワード
- @param
-
charset 文字コード
- @return
-
ハッシュ値
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 75 def create_auth_hash_info(request_params, auth_params, merchant_cc_id, merchant_pw, charset) if merchant_cc_id.nil? || merchant_pw.nil? return nil end # デコードする。 decoded_params = self::mdk_base64_decode(auth_params) keys = decoded_params.split(',') # パラメータを連結する。 str_params = "" str_params << merchant_cc_id keys.each do |key| value = request_params[key] if value.nil? return nil end str_params << value end str_params << merchant_pw # コンフィグからエンコードを取得する。 config = Veritrans::Tercerog::Mdk::MdkConfig.instance encode = config[:DTO_ENCODE] # 連結したパラメータ値から指定されたアルゴリズムのダイジェストを生成する。 str_params = Veritrans::Tercerog::Mdk::MdkUtils::mdk_encode_from(encode, str_params) return OpenSSL::Digest::SHA256.hexdigest(str_params) end
指定した値に格納された先頭の値を取得する。¶ ↑
・指定した値が配列の場合は、配列の先頭の値を取得する。 ・指定した値が配列ではない場合は、指定した値をそのまま返す。 ・指定した値が空配列である場合はnilを取得する。
- @param
-
value 配列もしくは値
- @return
-
先頭の値
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 116 def get_first_value(value) if !value.nil? and value.is_a?(Array) if 1 <= value.size param = value[0] else param = nil end else return value end return param end
Bese64デコードを行う。¶ ↑
- @param
-
data デコードする文字列
- @return
-
デコードを行った結果の文字列
# File tgMdk/lib/tg_mdk/mdk_auth_hash_util.rb, line 136 def mdk_base64_decode(data) target = data ? data.to_s.dup : "" target.gsub!('*', '=') target.gsub!('-', '/') target.gsub!('_', '+') target.gsub!(' ', '+') return target.unpack('m').first end