«Сила безопасности алгоритма дайджеста SHA-1 недостаточна для этого размера ключа» при перестройке на Android Studio - PullRequest
0 голосов
/ 18 декабря 2018

Я сталкиваюсь с этой проблемой при создании проекта.Ниже приведена трассировка стека.Я создал новый файл хранилища ключей для ключа разблокировки, но он не работал.

Caused by: java.io.IOException: Failed to generate v1 signature
at com.android.tools.build.apkzlib.sign.SigningExtension.onOutputZipReadyForUpdate(SigningExtension.java:292)
at com.android.tools.build.apkzlib.sign.SigningExtension.access$200(SigningExtension.java:53)
at com.android.tools.build.apkzlib.sign.SigningExtension$1.lambda$beforeUpdate$2(SigningExtension.java:171)
at com.android.tools.build.apkzlib.zip.ZFile.notify(ZFile.java:2154)
at com.android.tools.build.apkzlib.zip.ZFile.update(ZFile.java:923)
at com.android.tools.build.apkzlib.zip.ZFile.close(ZFile.java:1207)
at com.android.tools.build.apkzlib.zfile.ApkZFileCreator.close(ApkZFileCreator.java:174)
at com.google.common.io.Closer.close(Closer.java:216)
at com.android.builder.internal.packaging.IncrementalPackager.close(IncrementalPackager.java:332)
at com.android.build.gradle.tasks.PackageAndroidArtifact.doTask(PackageAndroidArtifact.java:704)
at com.android.build.gradle.tasks.PackageAndroidArtifact.splitFullAction(PackageAndroidArtifact.java:515)
at com.android.build.gradle.tasks.PackageAndroidArtifact.lambda$doFullTaskAction$3(PackageAndroidArtifact.java:396)
at com.android.build.gradle.internal.scope.BuildElements$ExecutorBasedScheduler$transform$$inlined$forEach$lambda$1.call(BuildElements.kt:121)
at com.android.build.gradle.internal.scope.BuildElements$ExecutorBasedScheduler$transform$$inlined$forEach$lambda$1.call(BuildElements.kt:110)
at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.security.InvalidKeyException: Failed to sign using signer "CERT"
at com.android.apksig.internal.apk.v1.V1SchemeSigner.signManifest(V1SchemeSigner.java:295)
at com.android.apksig.internal.apk.v1.V1SchemeSigner.sign(V1SchemeSigner.java:256)
at com.android.apksig.DefaultApkSignerEngine.outputJarEntries(DefaultApkSignerEngine.java:424)
at com.android.tools.build.apkzlib.sign.SigningExtension.onOutputZipReadyForUpdate(SigningExtension.java:290)
... 18 more
Caused by: java.security.InvalidKeyException: Failed to sign using SHA1withDSA
at com.android.apksig.internal.apk.v1.V1SchemeSigner.generateSignatureBlock(V1SchemeSigner.java:519)
at com.android.apksig.internal.apk.v1.V1SchemeSigner.signManifest(V1SchemeSigner.java:293)
... 21 more
Caused by: java.security.InvalidKeyException: The security strength of SHA-1 digest algorithm is not sufficient for this key size
at sun.security.provider.DSA.checkKey(DSA.java:104)
at sun.security.provider.DSA.engineInitSign(DSA.java:136)
at java.security.Signature$Delegate.init(Signature.java:1152)
at java.security.Signature$Delegate.chooseProvider(Signature.java:1112)
at java.security.Signature$Delegate.engineInitSign(Signature.java:1176)
at java.security.Signature.initSign(Signature.java:527)
at com.android.apksig.internal.apk.v1.V1SchemeSigner.generateSignatureBlock(V1SchemeSigner.java:515)

Следил за другими вопросами на форуме, но ничего не получалось.Пожалуйста помоги.Версия Android Studio - 3.2.1

Редактировать - Изменение minSdkVersion с 18 на 21 исправило проблему.Но не в состоянии выяснить истинную причину этого.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Сообщение об ошибке означает, что ключ, вероятно, имеет 1024 битов, потому что он был сгенерирован с любой версией JDK до JDK 8u151 - в то время как как минимум Ожидается 2048 битов ключ прочности:

Уровень безопасности алгоритма дайджеста SHA-1 недостаточно для этого размера ключа.

Причина этогоэто значит, что размер ключа по умолчанию изменился с 1024 на 2048 бит с JDK 8u151.Это изменение также можно найти в крипто-дорожной карте JRE / JDK с датой 2017-10-17:

Обновлены значения по умолчанию для jarsigner и keytool ‑sigalg до SHA256withDSA, а по умолчанию для ‑keysize - до2048 для ключей DSA.

«Инструкции по возврату» будут (которые на самом деле не применяются для вывесок в Android Studio):

Чтобы использовать другой алгоритм и /или меньшего размера ключа используйте параметры ‑sigalg и ‑keysize для keytool и jarsigner, чтобы переопределить текущие значения по умолчанию.Перед этим изменением значения по умолчанию были SHA1withDSA и 1024 бит.

Для APK рекомендуется использовать apksigner вместо jarsigner - иМежду тем существует APK Signature Scheme v3 (они обратно совместимы - поэтому не стоит использовать v1).

Генерация нового ключа с не менее 2048 битов должна позволять v1 (jar) подпись.Понижение JDK также будет возможным обходным путем (хотя я бы предпочел этого не делать).

Если вы уже опубликовали этот ключ в Google Play, лучшим из доступных вариантов может быть попытка перейти на Google Play App Signing (ключ выпуска будет понижен до ключа загрузки).


Суть в том, что, скорее всего, ваша общесистемная версия JDK намного старшечем OpenJDK в комплекте с текущей версией Android Studio - и вы можете генерировать столько новых ключей, сколько захотите, но они не будут соответствовать минимальным требованиям безопасности.Обновление общесистемной установленной версии JDK должно позволить вам генерировать ключи с достаточной силой;запустите java -version, чтобы увидеть, что вы даже используете для генерации ключей с недостаточной прочностью.

или просто используйте ... /android-studio/jre/jre/bin/keytool для их генерации.

0 голосов
/ 20 декабря 2018

Это может быть вызвано неправильным форматом значков, здесь отслеживается проблема: https://issuetracker.google.com/issues/63885809

Запустите команду ниже, чтобы увидеть ресурсы, которые находятся в проблеме

./gradlew assemble --stacktrace 

Найдите журналы, как показано ниже:

Ошибка: org.gradle.tooling.BuildException: не удалось сгенерировать подпись v1 Ошибка: java.io.IOException: не удалось сгенерировать подпись v1 Ошибка: com.android.apksig.apk.ApkFormatException: неподдерживаемый символ xxxx в имени записи ZIP "xxxx / xxx?"

Попробуйте удалить файл или заменить его новым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...