改写某个模拟器的go语言源码遇到的问题

快速看了一下go语言源码,整体就是一个http服务器,响应对应的结果
源码的某个值用到了RSA加密,RSA用的RSAwithMD5,返回用的不是base64而是bintohex
Go->Java
1.Go语言用到的私钥是ASN格式(PCKS#1格式),Java没有对应的方法直接使用
Java原生只能用PCKS#8的
解决方法:
使用openssl转换
openssl pkcs8 -topk8 -inform PEM -in private.key -outform pem -nocrypt -out pkcs8.pem
在线转换
使用第三方库
org.bouncycastle.asn1
2.需要响应不同的http请求
使用jetty嵌入,手动判断url
3.多出的换行符0x0a导致校验失败
response.getWriter().println(body); 改成response.getWriter().print(body);

Go->Python
1.找python3中好用的加密库
一开始找到了pycrypto,后来发现这玩意在windows下安装简直是巨坑,转用rsa库感觉好多了
2.需要响应不同的http请求
手写实现太复杂,直接用了flask框架感觉还不错

Go->PHP
1.找php的RSA加密方法
总体来说比较简单,由于用到的是rsawithMD5,所以需要加OPENSSL_ALGO_MD5参数
2.响应action后缀的请求
一开始也想像Java和Python一样,上个web框架(如:laraval),后来发现有两个问题
框架太重,响应不多
laraval框架在军哥的lnmp的一键安装包下坑太多,比如下面这个
后来决定改用nginx下的后缀改写实现
配置如下
location ~ /rpc/
{
rewrite ^(.*)\.action $1.php;
}
3.多出的空格符0x20导致校验失败
这个很隐蔽,我们常见的php文件源码如下
<?php
echo "Hello!";
?>
我们在文件结尾的?>后面加俩空格(部分ide喜欢干这种事情)
<?php
echo "Hello!";
?>
然后服务器响应的结果就会带空格,这个空格在浏览器的html中根本看不出来,java好歹还能在html中看到有个空行在那里
最终通过wireshark抓包提取tcp数据发现有这个问题,删掉?>之后的空格正常了。
解决过程参考了下面这个

update2017-11-27:php的结尾字符 ?>完全可以不写,不写可以防止多输出多余字符引发的各种问题
update2017-12-27:ilanyu的报文为带chunked编码的报文,报文有块大小的字符,目前Jetbrains不支持带chunked编码报文
update2017-12-27:Jetbrains新增屏蔽策略目前不支持127.0.0.1的host,但支持0.0.0.0,可能通过关键字屏蔽了一些host和domain

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值