接口加密

Base64不算是加密方式,只是一种编码方式
MD5、AES属于常见的加密算法

一般接口开发中有以下常用的几种安全机制:

  1. 用户认证
  2. 数字签名
  3. 接口加密

2、数字签名
在使用 HTTP/SOAP 协议传输数据的时候,签名作为其中一个参数,可以起到关键作用:
先来一个简单的,通过客户的密钥,服务端的密钥匹配;
这个很有好理解,例如一个接口传参为:
http://127.0.0.1:8000/api/?a=1&b=2
假设签名的密钥为:@signpassword
加上签名之后的接口参数为:
http://127.0.0.1:8000/sign/?a=1&b=2&sign=@signpassword
但是,这样的sign 参数明文传输是不安全的,一般会选择一些加密算法,比如MD5 算法(MD5算法是不可逆向的),比如MD5代码如下:

            import hashlib

            md5 = hashlib.md5()
            sign_str = "@signpassword"
            sign_bytes_utf8 = sign_str.encode()
            md5.update(sign_bytes_utf8)
            sign_md5 = md5.hexdigest()
            print(sign_md5)
执行后得到:6648e929329e53e7a91c50ae685a88b5
此时带签名的接口为:
http://127.0.0.1:8000/sign/?a=1&b=2&sign=6648e929329e53e7a91c50ae685a88b5
所以,当服务器接收到请求后,同样需要对“signpassword”进行 MD5 加密,然后,比对与调用者传来的 sign 加密串是否一致,从而来鉴别调用者是否有权限使用该接口。
接着,我们来理解一个复杂一点的:把sign参数传递为api key(申请获取)+timestramp(时间戳)同样需要 用代码来实现,原理和上面这个一致的。(伪代码)

def setUp(self):
  self.base_url = "http://127.0.0.1:8000/api/sec_add_notice/"
  # app_key
  self.api_key = "&APIkey"
  # 当前时间
  now_time = time()
  self.client_time = str(now_time).split('.')[0]
  # sign
  md5 = hashlib.md5()
  sign_str = self.client_time + self.api_key
  sign_bytes_utf8 = sign_str.encode(encoding="utf-8")
  md5.update(sign_bytes_utf8)
  self.sign_md5 = md5.hexdigest()
  
 3、接口加密
通常接口会使用更复杂一点的方式来进行加密的操作,常见的是AES的使用

参考链接:https://www.cnblogs.com/victory-0315/p/8616899.html

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值