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

来源:互联网 发布:nginx一键安装脚本 编辑:程序博客网 时间:2024/06/05 16:19
快速看了一下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
在线转换
http://tool.chacuo.net/cryptrsapkcs1pkcs8
使用第三方库
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的一键安装包下坑太多,比如下面这个
http://blog.csdn.net/dahuzix/article/details/73197718
后来决定改用nginx下的后缀改写实现
配置如下
location ~ /rpc/
{
rewrite ^(.*)\.action $1.php;
}
3.多出的空格符0x20导致校验失败
这个很隐蔽,我们常见的php文件源码如下
<?php
echo "Hello!";
?>
我们在文件结尾的?>后面加俩空格(部分ide喜欢干这种事情)
<?php
echo "Hello!";
?>
然后服务器响应的结果就会带空格,这个空格在浏览器的html中根本看不出来,java好歹还能在html中看到有个空行在那里
最终通过wireshark抓包提取tcp数据发现有这个问题,删掉?>之后的空格正常了。
解决过程参考了下面这个
http://bbs.csdn.net/topics/110006809

update2017-11-27:php的结尾字符?>完全可以不写,不写可以防止多输出多余字符引发的各种问题

原创粉丝点击