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

官方范例为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
时间: 2024-08-03 12:50:04

Elixir木蚂蚁支付服务器验签名方法的相关文章

支付宝app支付服务器签名代码(C#)

1,引入支付宝的sdk(AopSdk) 支付宝接口文档网站可下载,注意下载C#版本: 2,代码写的比较简单 public static string RSASign(string OrderNo,decimal Money,string bodyp,string subjectp) { string publicKeyPem = ;//支付宝公钥  string privateKeyPem = ;//商户私钥 string out_trade_no = OrderNo;//订单号 double

AppStore与GooglePlay游戏安全支付服务器模式详细流程

AppStore与GooglePlay游戏安全支付服务器模式详细流程 整体拓扑架构图见:http://www.cnblogs.com/legendstudio/p/4917617.html

windows server2012域服务器降级的方法

最近在一个新的网络环境里建立windows域服务器,准备建立主.备两台域服务器.在一台新服务器上面安装了windows2012R2并配置了DC服务.域和林的级别设置为Windows2012R2级别.在做辅助域的时候使用的是一台旧服务器,安装的是windows2012.在配置此dc域服务的时候发现由于域和林的级别不兼容,所以无法加入.网上搜了一下,发现在windows server2008之后dc的域和林的级别可以降级了,只是需要使用powershell操作,没有图形界面. 为了防止忘记,特记录如

ezjail服务器备份恢复方法

FreeBSD下使用ezjail管理jails虚拟机很方便,公司有多台ezjails服务器,运行n多jails虚拟机,一次硬盘故障,做了一次整机恢复,将方法归纳如下: 备份准备: 建议ezjails服务器安装2块同样大小的硬盘,一块作为备份.我是通过cron每日rsync备份需要的文件 需要备份的文件: /etc/rc.conf /etc/rc.local /etc/fstab.* /etc/crontab /usr/local/etc/ezjail/ /usr/local/etc/ezjail

运维人员处理服务器故障的方法总结

运维人员处理服务器故障的方法总结 一.尽可能搞清楚问题的前因后果 二.查看有谁在线 who last 三.查看之前执行了什么命令  history 四.查看现在在运行的进程是什么 pstree -a ps aux 五.查看监听的网络服务 netstat -nxlp netstat -ntlp netstat -nulp 六.查看CPU 和内存 free -m uptime top htop 七.查看硬件 lspci dmidecode ethtool 八.查看IO 性能 iostat -kx 2

局域网中远程重启服务器的安全方法

在局域网中,管理和操作服务器一般我们都使用客户端的远程桌面连接,由于客户端非正常退出或断网.失电等原因,以及服务器自身宕机等各种原因,导致远程桌面无法连接服务器,而此时,只要服务器还可以Ping通,就用不着我们亲自到机房复位机器了,可以通过远程重启服务器的方法实现远程桌面的再次连接,由于在网上搜索到的远程关机或重启计算机的方法,很多时候都不实用,总结起来不外乎以下几种方法: 1.将被控机器上的guest用户赋予远程关机的权限: 2.或者是把客户端机器的登录用户加入远程机器的本地管理员组: 3.或

phpmyadmin #2003 无法登录 MySQL服务器的解决方法

本文章向大家介绍phpmyadmin #2003 无法登录 MySQL服务器的解决方法,需要的码农可以参考一下. 通过phpmyadmin连接mysql数据库时提示:“2003 无法登录 MySQL服务器”...很明显这是没有启动mysql服务,右击我的电脑-管理-找到服务,找到mysql启动一下,,是不是启动有报错: “无法启动mysql服务 错误1067:进程意外中止 ” 然后就baidu google吧,多是说禁远程连接,要改my.ini文件,也有说防火墙的,总之对症下药. 不过同样的报错

sql serve 跨服务器查询数据方法

 今天在做sql server 的数据查询时,需要用到跨服务器连接,在这里记录一下,如何在sql server 中,使用跨服务器查询的方法,有以下步骤. /* 创建中间数据库链接 exec sp_addlinkedserver 'MiddleData', ' ', 'SQLOLEDB', '数据库连接实例,或者IP' exec sp_addlinkedsrvlogin 'MiddleData', 'false',null, '数据库连接帐号', '数据库连接密码' */ 创建好连接之后,就可

解决IE下载 apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法

解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码. 由于APK文件本身就是压缩包,如果用户的电脑上装了WinRAR(85%的装机量),用IE下载APK文件,扩展名就会被自动改为“.zip”. 如果你的下载服务器为Nginx服务器