Elixir木蚂蚁支付服务器验签名方法
2024-08-25 17:09:57
官方范例为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
最新文章
- scikit-learn一般实例之八:多标签分类
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
- Javascript的shift()和push(),unshift()和pop()方法简介
- c语言是如何实现泛型链表
- SQL in与exists
- 日期-用Datapicker实现前一天后一天
- 服务 通话录音 TelephonyManager
- Jobs定时器 - Quartz
- OCP-1Z0-051-题目解析-第14题
- Flex布局介绍
- python 模块:xlrd &;&; xlwt
- ubuntu18.04 下利用conda安装opencv3
- java笔试之输出
- 使用C#反射机制访问类的私有成员【转】
- 【Unity】9.1 导入粒子系统组件
- POJ1426:Find The Multiple(算是bfs水题吧,投机取巧过的)
- 【Docker】安装并测试安装成功
- PHP的数据类型与常量使用
- shell编程中
- 2017 多校4 Dirt Ratio
热门文章
- C# 证书打印《六》
- 【bzoj4259】 残缺的字符串 FFT
- POJ 1102
- C语言-apache mod(模块开发)-采用VS2017开发实战(windows篇)
- AbstractFactory抽象工厂模式(创建型模式)
- 模拟登陆+数据爬取 (python+selenuim)
- (01)JVM-内存三大核心区域以及分析
- HUE配置文件hue.ini 的hdfs_clusters模块详解(图文详解)(分HA集群和非HA集群)
- python单元测试pytest
- 3-nginx.conf参数配置