和其他对接用户的一个问题

最近对接用户数据遇到一个关于双方平台用户数据隐私的问题,举个例子说明

场景:
a平台要对接b平台的用户数据,保证b平台的用户可以用在b平台的登录账号和密码在a平台登录
a,b平台使用不同的密码加密方式,b平台同时保存用户的明文密码
出于数据隐私,b平台在提供用户数据中不提供用户的明文(AES),a平台也不提供加密方式

a平台提出一个方案A

a提供一个加密的web api,b平台get提供passwd,返回a平台的密文,如下
http://encryp.aweb.com/index.php?passwd=
具体实现


$pin = "aaa"
echo md5($_GET['passwd'].$pin);//明文和pin拼接md5

这样b平台不知道api的具体实现(a平台如何加密),但是能拿到用户密码(a平台的密文),a平台仅仅只能通过api拿到明文,但是不知道是那个用户的,所以对a,b平台都是数据隐私安全的,但是不保证a平台在api中记录明文


cache_pass($_GET['passwd']);
$pin = "aaa"
echo md5($_GET['passwd'].$pin);//明文和pin拼接md5

如何让b平台将用户密码转换成a平台的密文,并保证双方平台的数据隐私呢

a平台提出一个方案B

提供一个可执行程序给b平台,在b平台的服务器上通过命令行的方式传明文,转成a平台的密文,只要保证这个可执行程序b平台看不懂(无法反编译)
这里就可以用到go,a平台写一个go程序,然后build给b平台即可,b平台不需要有go的环境,也无法反编译获取源码,但是可以断网检测是否curl接口

#encryp.go
package main

import (
    "crypto/md5"
    "encoding/hex"
    "fmt"
    "os"
)

func main() {

    for k, v := range os.Args {
        if k!=0 {
            fmt.Println(md5V(v))
        }
    }
}

func md5V(str string) string  {
    h := md5.New()
    //h.Write([]byte(str+"hsjc!@#$mkj1098"))
    h.Write([]byte(str+"aaa"))
    return hex.EncodeToString(h.Sum(nil))
}

# go build encryp.go(针对b平台服务器的操作系统) 生成可执行程序提供给b平台

调用方式

file

可以转载,但必须说明出处

发表评论