1.介绍:
MD5为不可逆散列算法,可用于存储用户密码,存储后不需要永远不需要知道明文。密码比较时只需将用户输入的密码再次转成MD5码与存储的相比较即可得知用户输入密码是否正确。另外,MD5 不可逆的原因是其是一种散列函数,使用的是hash算法,在计算过程中原文的部分信息是丢失了的。 当我们加密了 就无法还原了 只进行对比
2.python使用方法
#使用hashlib库内的md5
import hashlib
#初始化md5
m = hashlib.md5()
#对数据进行加密
m.update('123')
#获取密文
m.hexdigest()
HTML使用方法
需要js文件 使用第三方md5 js文件 bootcdn
<script src="https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.18.0/js/md5.js"></script>
使用方式:
<script>
md5('123')
</script>
3.加密原理
参数拼接:顺序要统一,得到的加密串 需要把全部字母变成大写
4.拼接加密时应加入共同密钥才安全
5.MD5在生鲜系统的应用
# 订单号+价格+密钥
key = SECRET_KEY
# 加密串
str_md5 = request.POST.get('str_md5')
# 拼接加密串进行对比
join_str = order_num + str(total) + key
# 加密拼接字符
m = hashlib.md5()
m.update(join_str.encode('utf-8'))
str_m = m.hexdigest()
if str_m.upper() == str_md5.upper():
# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? +order_string
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=order_num, # 订单号
total_amount=total, # 金额(字符串)
subject="水果生鲜系统",
return_url="http://127.0.0.1:8000/buyer/return_url/", # 支付宝沙箱填写的回调地址
notify_url="http://127.0.0.1:8000/buyer/return_url/" # 可选, 不填则使用默认notify url
)
models.Buycar.objects.filter(buyer_id=request.session['buyer_id_session']).delete()
# 需要跳转到https://openapi.alipay.com/gateway.do? + order_string 进行支付
# https://openapi.alipaydev.com/gateway.do
# https://openapi.alipay.com/gateway.do
print("https://openapi.alipaydev.com/gateway.do?" + order_string)
msg = {
'code': 1,
'msg': 'https://openapi.alipaydev.com/gateway.do?' + order_string
}
return HttpResponse(json.dumps(msg))
else:
msg = {
'code': 2,
'msg': '你不能篡改'
}
return HttpResponse(json.dumps(msg))
注:无论怎么MD5加密都无法和我们加密串相等。