|
@@ -0,0 +1,76 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+
|
|
|
+from . import mpfun
|
|
|
+from models import *
|
|
|
+from sqlalchemy.orm import Session
|
|
|
+from database import get_local_db
|
|
|
+
|
|
|
+# 应急专家信息表
|
|
|
+
|
|
|
+# 加密和HMAC签名
|
|
|
+def sign_row(db: Session, row: EmergencyExpert) -> None:
|
|
|
+ if row.sign != '':
|
|
|
+ return
|
|
|
+
|
|
|
+ name = mpfun.base64_data(row.name) # 姓名
|
|
|
+ area = mpfun.base64_data(row.area) # 地区
|
|
|
+ type = mpfun.base64_data(row.type) # 类型
|
|
|
+ company = mpfun.base64_data(row.company) # 公司
|
|
|
+ official = mpfun.base64_data(row.official) # 职称
|
|
|
+ phone = mpfun.enc_data(row.phone) # 手机号码
|
|
|
+ longitude = str(row.longitude) # 经度
|
|
|
+ latitude = str(row.latitude) # 纬度
|
|
|
+
|
|
|
+ sign_data = ",".join([name, area, type, company, official, phone, longitude, latitude])
|
|
|
+ sign_hmac = mpfun.sign_data(sign_data)
|
|
|
+ # print('sign_data:', sign_data)
|
|
|
+ # print('sign_hmac:', sign_hmac)
|
|
|
+
|
|
|
+ row.phone = phone
|
|
|
+ row.sign = sign_hmac
|
|
|
+
|
|
|
+ db.commit()
|
|
|
+
|
|
|
+# 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
|
|
|
+def sign_valid_row(row: EmergencyExpert) -> bool:
|
|
|
+ if row.sign == '':
|
|
|
+ return True
|
|
|
+
|
|
|
+ # 关键字段合并字符串
|
|
|
+ sign_data = get_sign_str(row)
|
|
|
+ # print('sys_user sign_data:', sign_data)
|
|
|
+
|
|
|
+ # 原HMACSM3数值
|
|
|
+ sign_hmac = row.sign
|
|
|
+ # print('sign_hmac:', sign_hmac)
|
|
|
+
|
|
|
+ return mpfun.hmac_verify(sign_data, sign_hmac)
|
|
|
+
|
|
|
+# 生成待签名的字符串
|
|
|
+def get_sign_str(row: EmergencyExpert) -> str:
|
|
|
+ name = mpfun.base64_data(row.name) # 姓名
|
|
|
+ area = mpfun.base64_data(row.area) # 地区
|
|
|
+ type = mpfun.base64_data(row.type) # 类型
|
|
|
+ company = mpfun.base64_data(row.company) # 公司
|
|
|
+ official = mpfun.base64_data(row.official) # 职称
|
|
|
+ phone = (row.phone) # 手机号码
|
|
|
+ longitude = str(row.longitude) # 经度
|
|
|
+ latitude = str(row.latitude) # 纬度
|
|
|
+
|
|
|
+ # 关键字段合并字符串
|
|
|
+ sign_data = ",".join([name, area, type, company, official, phone, longitude, latitude])
|
|
|
+ return sign_data
|
|
|
+
|
|
|
+# 生成HAMC签名值
|
|
|
+def get_sign_hmac(row: EmergencyExpert) -> str:
|
|
|
+ sign_data = get_sign_str(row)
|
|
|
+ return mpfun.sign_data(sign_data)
|
|
|
+
|
|
|
+# 对所有数据进行签名
|
|
|
+def sign_table():
|
|
|
+ print('sign_emergency_expert table =====>>>')
|
|
|
+ with get_local_db() as db:
|
|
|
+ rows = db.query(EmergencyExpert).filter(EmergencyExpert.sign == '').all()
|
|
|
+ for row in rows:
|
|
|
+ sign_row(db, row)
|