接着上一篇双向签名之后
有了上面那个流程后,看似安全了,可是他真的完美了吗?其实还是有一个缺陷的,开发者完全可以拿到证书后直接给手机安装上,这样做不是就绕开Appstore了吗,那怎么才能让开发者在调试的时候可以直接安装在手机上,而发布的时候必须在Appstore上呢?答案只有一个:描述文件
还记得咱们在申请证书之后想要成功的真机调试,还有一个重要步骤吧,就是分别配置开发模式、发布模式的描述文件吧"AAAmobileprovision"你必须要在描述文件内部指定你的设备号,才能调试你对应的app吧。
描述文件是什么?其实就是一组权限控制的文件,它里面记录了可以被运行的设备、你的应用的appid、等其他权限类控制。口说无凭,我这里打开一个开发者模式的描述文件看一看。
我们挑重要的看,它里面就直接记录了指定运行的手机设备号、这个证书日期、还有你开发者的相关信息,当然,你不要尝试着你手动更改他就能够绕过监控,看到那个<key>UIDI<key>了吗?这个描述文件也自带一组唯一编码的,也是会经过效验的,你想要更改信息,只能从苹果服务器去申请,他会随着你xocode打包的时候一起放入App。
hash值 = 数据(100元)进行一次hash,然后用私钥加密, 服务器用公钥解开这个hash值,自己把数据hash意思,和这个hash进行比较。 这个值只有客户端的私钥可以修改。
举一个小小的例子。你消费了100元,并将此消息发送到服务器执行对应 *** 作。这个时候完全有可能出现一个第三方截获这个信息,将100元改为1000元再发给服务器啊。这时候,服务器只要将这个1000元进行一下hash,然后和你发过来的hash比较一下就知道了,因为你发过来的是对100元的hash。
hash是什么?消息摘要,签名是什么?就是对你的app的消息摘要!
还是口说无凭,下面我来看一看。
解压你的app后这个文件夹里面就是你的签名,里面记录的是对你的资源类文件的签名:比如、音视频等。
原因和解决方法:
1、确保目标应用apk是release包。
2、检查AppID、AppSecret和目标应用的包名是否和微信后台一致。
3、检查微信后台填写的应用签名是否正确!获取应用签名的两种方式。
4、重装微信或者清除微信的缓存信息:微信会缓存包信息、或者AppID等信息,若第一次没有登录,需要重装微信或者清除微信的缓存信息
publicvoidgetSingInfo(){try{PackageInfopackageInfo=getPackageManager()getPackageInfo("comexampleyao",PackageManagerGET_SIGNATURES);Signature[]signs=packageInfosignatures;Signaturesign=signs[0];parseSignature(signtoByteArray());}catch(Exceptione){eprintStackTrace();}}publicvoidparseSignature(byte[]signature){try{CertificateFactorycertFactory=CertificateFactorygetInstance("X509");X509Certificatecert=(X509Certificate)certFactorygenerateCertificate(newByteArrayInputStream(signature));StringpubKey=certgetPublicKey()toString();StringsignNumber=certgetSerialNumber()toString();Systemoutprintln("pubKey:"+pubKey);Systemoutprintln("signNumber:"+signNumber);}catch(CertificateExceptione){eprintStackTrace();}}
给app签名,生成release apk。
1、生成keystore文件,这个可以用AndroidStudio生成。
2、假设生成的文件名叫testkeystore,放到工程的app下面。
3、修改app下面的buildgradle文件,增加如下内容:
4、 生成release版本apk
gradle clean build
以上就是关于苹果APP验证原理(2):描述文件与签名信息全部的内容,包括:苹果APP验证原理(2):描述文件与签名信息、app打开微信小程序提示签名信息不对、怎样获取他人安卓app的应用签名文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)