如何使用公共加密来管理 Android 应用程序的许可?
Posted
技术标签:
【中文标题】如何使用公共加密来管理 Android 应用程序的许可?【英文标题】:How to use public encryption to manage licensing on android applications? 【发布时间】:2011-12-05 02:08:17 【问题描述】:我不想在 android Market 上发布我的应用程序,但我会根据用户设备的 MAC 地址从我的网站创建一个许可证密钥。它还应包括到期日期。 一旦用户在 android 设备中输入代码,它应该被识别。 我读过它可以通过使用自定义公共加密来完成。在这种情况下,我应该实现:
-
我的应用程序中的一个函数获取
设备并向用户显示一个字符串。
我网站上的一个函数,它拥有私钥并在第 1 点加密字符串并添加到期日期
我的应用程序中的一个函数,它在第 2 点解密字符串。使用公钥并验证许可证密钥。
我已经阅读了很多关于 *** 和其他网站的讨论,但没有任何适用的......或者不清楚如何在我的场景中应用:(
你能提供我解决这个问题的方法吗?有没有我想念的android原生的东西(我希望)?
非常感谢! 马可
【问题讨论】:
旁注:如果用户升级他的手机会发生什么?将许可证密钥绑定到 mac 地址可能不是最好的主意,除非您的许可证是按设备而不是按用户的。 该应用程序是每个设备的,我知道,如果用户更改他的设备,他必须要求提供新的许可证密钥。这是因为我的应用程序也可以安装在同一用户的许多设备上。感谢您的回复。 【参考方案1】:我认为实现你的意图没有什么困难的:
-
您的许可服务器必须有自己的私钥和公钥对。
然后您必须在第一次运行/安装期间在您的应用程序中创建私钥。它可以随机完成
那么您必须使用公钥在您的应用程序和服务器之间进行交换
在购买/许可过程中,您的应用程序应加密 MAC 地址或其他(gmail id、IMEI 代码等)发送到服务器 - 服务器存储密钥
为了检查发送到服务器 MAC 密码的许可证申请的有效性 - 服务器检查它是否存储在数据库中
如果你不知道如何实现私钥/公钥的东西 - 阅读手册,Diffie-Hellman 的程序有很多实现 - 很简单,没什么特别的
【讨论】:
该应用程序是离线使用的,因此设备和许可服务器之间的交互不可靠。根据我在帖子中写的 3 个步骤……我应该使用哪些(RSA?)函数/类来加密/解密?我只根据指南创建了一个密钥库,但我不知道如何实现该过程。我已经清楚了工作流程,但我不知道如何实现它。谢谢。 @Marco 应用程序必须有办法与服务器交换 - 没有这是不可能的。 web/gprs/wifi 或 SMS 网关。这是 Diffie-Hellman download.oracle.com/javase/1,5.0/docs/guide/security/jce/… 的示例实现 这就是我对工作流程的想法:1. 我将创建一个公钥和私钥(使用 RSA?) 2. 我将在应用程序代码中嵌入公钥 3. 应用程序向用户显示代码(属于 MAC 并以某种方式修改) 4. 用户在我的网站上插入代码并读取我用私钥加密的新许可证密钥 5. 用户插入许可证密钥在应用程序中 6. 应用程序使用公钥解密许可证密钥并检查它是否是应用程序在第 3 点向用户提供的内容。 @Marco 或多或少类似,但您也可以编写特殊的应用程序(如 Google 的 Market 应用程序)来处理许可证检查程序。在这种情况下,您的应用程序可以离线工作,我的意思是通过您的许可证检查应用程序提供的服务发送/接收请求。就像谷歌的市场应用一样developer.android.com/guide/publishing/licensing.html【参考方案2】:我希望在未通过 Play 分发的应用上实施许可,但遇到了这个问题:
https://code.google.com/p/droidactivator/
也许它也会帮助你?
【讨论】:
如果您在此处详细说明这对您有帮助的原因,然后提供详细信息链接,则会对其他人有更多帮助以上是关于如何使用公共加密来管理 Android 应用程序的许可?的主要内容,如果未能解决你的问题,请参考以下文章
如何在android studio中伪装或加密gmail发件人的硬编码密码
Android APK 签名打包原理分析Android签名原理
Android APK 签名打包原理分析Android签名原理