JDChi / LicenseApp

实现一套app授权license的算法,license交互可以参照windows序列号,输入用户账号 abc,通过算法运算,得到license key xxx-xxx-xxx-xxx,其中key的长度建议在20位左右,构成为全大写字符+数字,生成的算法要求必须使用 哈希算法(SHA1/256/512任选), RSA(KeySize 2048), 编码技术(HEX编码、字母表编码、BASE64编码任选),生成的key必须是在某个特定的应用、设备中使用,转移之后key无法使用

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

项目结构

app

主要是用于用户输入信息

licensekeylibrary

是一个库,里面放着加密,解密的封装,以及其它一些数据的生成

serverapp

主要是对客户端提交的用户输入信息进行证书的生成和校验

注:在运行的时候必需保证客户端和服务端两个app都已经安装在手机上,我这里没做判断,在之后会做多一层判断。

app和serverapp之间的通信是用AIDL的方式进行,在一开始我是用Messenger来做的(Messenger的底层也是AIDL,这里一开始为了方便就用Messenger),所以你可以看到有RegsitActivity和RegistActivity1,前者是用Messenger,后者就是用AIDL,所以可以做些适当的修改进行切换。

另我也对此写了相关博客

Android之使用AIDL进行IPC(一)

序列图

app->serverapp: 提交生成证书的数据
Note right of serverapp: 对数据进行处理
serverapp-->app: 返回证书
app->serverapp: 提交校验数据
Note right of serverapp: 对数据进行校验
serverapp-->app: 返回校验结果

客户端流程图


start=>start: 开始
end=>end: 结束

opGetDeviceInfo=>operation: 获取设备信息(uuid,包名)
opInputUserName=>operation: 用户输入“abc”
opGenLicenseData=>operation: 将用户输入和设备信息拼接起来
opSendLicenseData=>operation: 将拼接数据发给服务端
opGetLicense=>operation: 得到客户端返回的证书和RSA公钥
opCombimeDataWithLicense=>operation: 将license和用户输入,设备信息生成json(data)
opAESWithData=>operation: 用AES对data加密
opRSAWithAESKey=>operation: 用RSA公钥对AES的密钥加密
opRSASignData=>operation: 用RSA对数据进行签名
opGenSubmitData=>operation: 将加密后的data,加密后的AES密钥,RSA签名公钥和签名拼接成json(submitData)
opSendToServer=>operation: 将submitData提交给服务端

start->opGetDeviceInfo->opInputUserName->opGenLicenseData->opSendLicenseData->opGetLicense->opCombimeDataWithLicense->opAESWithData->opRSAWithAESKey->opGenSubmitData->opSendToServer->end

服务端流程图


start=>start: 开始
end=>end: 结束
opGenRSAKey=>operation: 生成RSA公钥和密钥
opReceiveData=>operation: 接收到来自客户端的数据
opSHA1WithData=>operation: 使用SHA1对拼接后的数据做摘要
opHexWithData=>operation: 对摘要后的数据做Hex
opGenLicense=>operation: 得到要填写的证书(20位,字母和数字构成)
opReplyLicense=>operation: 把证书和RSA公钥发给客户端
opReceiveSubmitData=>operation: 接收客户端发来的submitData
opRSADecryptAESKey=>operation: 用RSA公钥解密出AES密钥
opAESDecryptData=>operation: 用AES密钥解密出data
opCompareLicense=>operation: 将Hex后的数据与data里的license做对比
conLicense=>condition: 对比一致?
conSign=>condition: 签名校验成功?
opReplySuccess=>operation: 注册成功
opReplyFailed=>operation: 注册失败

start->opGenRSAKey->opReceiveData->opSHA1WithData->opHexWithData->opGenLicense->opReplyLicense->opReceiveSubmitData->opRSADecryptAESKey->opAESDecryptData->opCompareLicense->conLicense
conLicense(yes)->conSign
conLicense(no)->opReplyFailed->end
conSign(yes)->opReplySuccess->end
conSign(no)->opReplyFailed->end

About

实现一套app授权license的算法,license交互可以参照windows序列号,输入用户账号 abc,通过算法运算,得到license key xxx-xxx-xxx-xxx,其中key的长度建议在20位左右,构成为全大写字符+数字,生成的算法要求必须使用 哈希算法(SHA1/256/512任选), RSA(KeySize 2048), 编码技术(HEX编码、字母表编码、BASE64编码任选),生成的key必须是在某个特定的应用、设备中使用,转移之后key无法使用


Languages

Language:Java 100.0%