码迷,mamicode.com
首页 > 其他好文 > 详细

Elixir木蚂蚁支付服务器验签名方法

时间:2015-07-23 19:26:43      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

官方范例为java

public boolean verify(String sign , String appKey , String orderId) throws UnsupportedEncodingException{
		if(sign.length()<14){
			return false;
		}
		String verityStr = sign.substring(0,8);   
		sign = sign.substring(8);		
		String temp = MD5Util.toMD5(sign);			
		if(!verityStr.equals(temp.substring(0,8))){
			return false;
		}
		String keyB =  sign.substring(0,6);
			
		String randKey = keyB+appKey;
			
		randKey = MD5Util.toMD5(randKey);
			
		byte[] signB = Base64.decodeFast(sign.substring(6));
		int signLength = signB.length;
		String verfic="";
		for(int i =0 ; i< signLength ; i++){
			char b = (char)(signB[i]^randKey.getBytes()[i%32]);
			verfic +=String.valueOf(b);
		}
		return verfic.equals(orderId);	
	}

 Elixir

def verifyPayment(appkey, %{"tradeSign" => tradeSign} = params) do 
    sign_length = String.length(tradeSign)
    if sign_length < 14 do
      false
    else
      verityStr = String.slice(tradeSign, 0, 8)
      sign = String.slice(tradeSign, 8, sign_length + 1)
      temp = Utils.md5_sign(sign)
      temp = String.slice(temp, 0, 8)
      if verityStr == temp do
        keyB = String.slice(sign, 0, 6)
        randKey = keyB <> appkey
        randKey = Utils.md5_sign(randKey)
        signB =  String.slice(sign, 6, sign_length + 1) |> Base.decode64! |> String.to_char_list
        randKey = randKey |> String.to_char_list
        signedOrderId =  signB |> Enum.with_index |> Enum.map fn({c, i}) -> Bitwise.bxor c,  Enum.at(randKey, rem(i, 32)) end
        params["orderID"] == signedOrderId
      else
        false
      end
    end
  end

 

Elixir木蚂蚁支付服务器验签名方法

标签:

原文地址:http://www.cnblogs.com/jasonduan/p/4671106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!