python做手机app服务端界面,数据AES加密传输
最近小编在为一款app写json界面,当然选择了熟悉的django框架,因为之前做过app界面,传输使用了token机制以及签名机制,JWT做的许可权校验,而且上了https,一直觉得安全还可以。但是最近写这个是一款手机挖矿程序,里面涉及了很多挖矿的算法,和服务器通信需要极高的加密算法要求,漏了就可能被作弊挖矿。在调研的过程中遇到了AES加密,觉得可以给大家简单的了解一下,当然有使用django做app服务端的小伙伴也可以关注我 ,一起讨论学习。
首先说下AES加密算法,下面贴一段简介:
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
其实小编的需求很简单,除去一些密码本的设计就是,app客户端用一个私钥加密,加密后传输过来数据,防止抓包,获取数据,然后服务器端收到进行解密,回复数据也是回复加密后的数据,客户端解密,当然是在token和签名机制的前提下,发现问题数据立即封号。当然为了防止反编译,私钥肯定要做一些处理。
在多说一句,我个人觉得通信肯定是没有绝对的安全,但是安全就是做到造假的技术门槛够高就行了,挡住99%的黑客抓包攻击,至于那1%,损失了就报警就行了。
查了一下据说现在AES是不能破解的(虽然我不信),所以假装觉得还比较靠谱,所以研究了一下在python中的应用。
1、首先肯定要安装对应的包
conda create -n aes python=2.7
对应py2.7 然后安装下
pip install pycrypto
网上说windows会遇到很多问题,需要安装vs的编译器等等,但是我没遇到,也可能是之前转过,所以这里不多说,遇到了大家可以来找小编讨论。
2、使用
引入对应包,这里简单说一下,AES是一种算法,这种算法有很多的实现模式,最常用的事CBC模式,当然还有很多其他模式
想了解的可以自己查下,我就不多说了。
加密的方式大概是这样,加密的字元串必须是16位的倍数,16,32,或者48,如果加密的字元串不是16的倍数,那就用'\0'补足,如下实现:
开始觉得有点坑,不过也忍了,加0补足就加0补足吧
然后是解密,也比较简单,解密出来把右面的\0删掉就行了,如下:
然后使用的使用 要传入秘钥。如下运行截图
然后就是手机端的AES加密算法,我就不知道他们怎么弄的了,不过肯定是能弄。
感觉都是站在巨人的肩膀,没啥技术含量
需要这段代码的可以关注我