Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我可以指定apksigner使用的摘要算法吗?_Android_Apk_Apksigner - Fatal编程技术网

Android 我可以指定apksigner使用的摘要算法吗?

Android 我可以指定apksigner使用的摘要算法吗?,android,apk,apksigner,Android,Apk,Apksigner,由于最近的SHA1冲突新闻,我想确保我的apk签名中不再使用SHA1。但是,在中找不到参数 有没有办法指定apksigner使用的摘要算法(直接或间接) (在SDK 24之前,Android使用java的jarsigner对apk进行签名,apk的选项有-sigalg SHA1withRSA-digestalg SHA1) 更新:正如Alex提到的,我在中找到了如何确定方案v1的签名算法 简而言之,apksigner根据minimumSDK和证书的密钥类型确定它 SHA256withRSA适

由于最近的SHA1冲突新闻,我想确保我的apk签名中不再使用SHA1。但是,在中找不到参数

有没有办法指定apksigner使用的摘要算法(直接或间接)

(在SDK 24之前,Android使用java的
jarsigner
对apk进行签名,apk的选项有
-sigalg SHA1withRSA-digestalg SHA1


更新:正如Alex提到的,我在中找到了如何确定方案v1的签名算法

简而言之,
apksigner
根据
minimumSDK
和证书的密钥类型确定它

  • SHA256withRSA
    适用于最低SDK 18(Android 4.3)及以上版本
  • SHA256withDSA
    适用于最低SDK 21(Android 5.0)及以上版本
  • SHA256withEC
    适用于最低SDK 18及以上
  • SHA1with*
    用于较低的最低SDK级别

这是我为备忘录写的常见问题解答:。

不是直接的
apksigner
尝试仅使用安全摘要和签名算法,但这是在签名密钥(大小、算法)和被签名的APK支持的Android平台版本所施加的约束范围内实现的。特别是,对于JAR签名,
apksigner
默认使用SHA-256或更高版本,但仅适用于仅支持API级别18或更高版本的APK(如
minSdkVersion
在其
AndroidManifest.xml
中声明的)。在早期平台上运行的APK必须使用SHA-1,因为这些早期平台不支持使用SHA-256或更高版本验证APK。对于APK签名方案v2签名,仅使用SHA-256或更高版本,因为此签名方案甚至不支持SHA-1

如果您希望
apksigner
使用SHA-256签署您的APK,您可以:

  • 将APK的
    minSdkVersion
    设置为18或更高,但这将使API级别为17或更低的Android平台在安装时拒绝APK
  • --min sdk version=18
    传递到
    apksigner
    ,但这将使API级别为17及更低的Android平台在安装时拒绝APK
  • 仅使用APK签名方案v2对APK进行签名,方法是将
    --v1 signing enabled=false
    传递给
    apksigner
    ,但这将使API级别为23及更低的Android平台在安装时拒绝APK
另外,即使您切换到仅使用SHA-256对APK进行签名,Android仍将接受带有您的包名和签名证书的APK,并使用SHA-1或MD5进行签名。因此,根据您的威胁模型,您可能需要切换到从未用于SHA-1或更弱摘要算法的新签名密钥。这不仅适用于实际加密签名中使用的摘要算法,也适用于
.SF
MANIFEST.MF
文件中使用的摘要算法