我想用两件事来为这个问题做准备,这样我就可以缩小我的实际问题所在:
a)我以前做过软件开发,但从来没有用过android
b)我熟悉PKI和加密,散列和数字签名,等等等等
话虽如此,我无法追踪有关Android验证应用创建者的位置和方式的更多信息.我听到了很多不同的信息,所以我正在尝试综合以更好地了解工作流程.
我知道每个应用程序开发人员都会获得他们自己的私钥/公钥对,并且他们通过散列APK来签署他们的应用程序(如果我没有记错的话,大部分时间都使用SHA-1)并且你去了.你上传它(我相信)公钥在APK内的META INF中.我明白这一点.
我的问题是这与用户何时下载应用程序本身有何关系.我知道电话会检查以确保应用程序有效签名,并且签名还包含有关作者等的信息.但我也读到应用程序是自签名的,Google Play(或者他们现在称之为市场的任何东西)都没有实现CA,并且没有身份验证?但我的问题是,阻止人们在另一个开发者名称上下载应用程序(众包除外)是什么?
如果手机只检查有效签名是否意味着在上传应用程序时完成了唯一的身份验证方式?如果是这样的话,应用市场如何检查呢?这是通常的 - 使用文件上的私钥并验证签名?或者开发人员是否必须向市场提供其私钥进行身份验证?
按照http://source.android.com/source/downloading.html和https://honey200.wordpress.com/2011/11/17/download-android-source-code-in-windows/上的说明我可以在 Windows 上的 Cygwin 下运行时不会初始化存储库。我以前在 Linux 上做过这个,一切都很顺利。
在 cygin 终端中,我安装了 git 和 curl,但是当我运行时:
仓库初始化 -u https://android.googlesource.com/platform/manifest -b android-5.0.0_r7
我得到以下信息:
Get https://android.googlesource.com/platform/manifest
Traceback (most recent call last):
File "/cygdrive/e/lollipop/source/.repo/repo/main.py", line 531, in <module>
_Main(sys.argv[1:])
File "/cygdrive/e/lollipop/source/.repo/repo/main.py", line 507, in _Main
result = repo._Run(argv) or 0
File "/cygdrive/e/lollipop/source/.repo/repo/main.py", line 180, in _Run
result = cmd.Execute(copts, cargs)
File "/cygdrive/e/lollipop/source/.repo/repo/subcmds/init.py", line 390, in Execute
self._SyncManifest(opt)
File "/cygdrive/e/lollipop/source/.repo/repo/subcmds/init.py", line 163, in _SyncManifest
m._InitGitDir(mirror_git=mirrored_manifest_git)
File "/cygdrive/e/lollipop/source/.repo/repo/project.py", line 2148, in _InitGitDir
self.bare_objdir.init()
File "/cygdrive/e/lollipop/source/.repo/repo/project.py", …Run Code Online (Sandbox Code Playgroud) 我正在写一些加密(已知的算法 - 不是自己编写的)但我找不到关于这种情况的任何具体文档.
填充的一种方法(虽然问题是它们中的任何一个可能有相同的问题)的工作方式如下:
如果块是<8字节,则用填充字节数填充结尾
因此FF E2 B8 AA成为FF E2 B8 AA 04 04 04 04
这很好,并允许你有一个非常明显的窗口,你可以在解密过程中删除填充,但我的问题是,而不是上面的例子说我有这个 -
10 39 ff ef 09 64 aa(7个字节长).现在在这种情况下上面的算法会说这个转换为10 39 ff ef 09 64 aa 01,但我的问题是在解密你如何决定你何时在解密消息结束时得到01字节你怎么办?知道它是否意味着填充(并且应该被剥离)或它是实际消息的一部分,你应该保留它吗?
我能想到的最合理的解决方案是在加密中附加/预先添加实际消息的大小,或者添加一个奇偶校验块来说明是否存在填充,这两者都有我自己的问题.
我假设之前遇到过这个问题,但我想知道解决方案是什么.