Как да разрешим натоварването на хранилище за ключове: невалиден формат на хранилище за ключове?

Получавам ключ за освобождаване на приложението си преди три месеца. Сега форматирах компютъра си и когато подписах приложението си с моя releasekey, получих грешката: java.lang.RunTimeException: keystore load: invalide keystore format.

Как трябва да разреша тази грешка?

Командата беше: jarsigner -verbose -keystore "D:\releasekey.keystore" "D:\myApp.apk" releasekey

Използвам по-старото хранилище за ключове (първото), но получавам споменатата грешка.

Опитах и ​​получих това:

java.io.IOException: java.io.IOException: invalid keystore format 
at sun.security.provider.javaKeyStore.engineLoad(JavaKeyStore.java:650) 
at sun.security.provider.javaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) 
at java.security.KeyStrore.load(KeyStore.java:1214) 
at sun.security.tools.KeyTool.doCommands(KeyTool.java:789) 
at sun.security.tools.KeyTool.run(KeyTool.java:340) 
at sun.security.tools.KeyTool.main(KeyTool.java:333) 

въведете описание на изображението тук


person weldsonandrade    schedule 06.09.2012    source източник


Отговори (1)


Хранилището за ключове съдържа частния ключ за шифроване, използван за подписване на приложението - повторното изпълнение на командата ще генерира напълно различен ключ (паролата просто защитава файла, който я съхранява - тя няма пряка връзка със самия ключ за шифроване) - НЕ можете да възстановите /изградете го отново, ако сте загубили файла за съхранение на ключове.

Ако сте го загубили, вашите потребители ще трябва да деинсталират напълно съществуващото приложение, преди да могат да инсталират новата ви версия - и те ще загубят всички данни, записани в приложението, когато го деинсталират (няма как да заобиколят това, това е функция за сигурност в android)

Още по-лошо - Android Play Store няма да ви позволи да качите новата си версия, защото те не са кодирани с помощта на същия ключ като старата версия - ще трябва да пуснете новата версия под друго име на пакет - това означава вашите съществуващи потребители дори не могат да надстроят автоматично (те трябва да намерят новата версия) - и вие нямате начин дори да им кажете, че трябва да надстроят (не можете да качите нова версия на старото приложение...)

Трябва да намерите този ключов файл във вашите резервни копия или да се опитате да възстановите данните от диска - да се надяваме, че сте направили "бърз" формат - в този случай добра услуга за възстановяване на данни може да успее да ги върне ако вашата операционна система все още не го е презаписала.

Късмет!

person msEmmaMays    schedule 06.09.2012
comment
здравей, възстановявам стария си ключ за освобождаване, но не мога да използвам jarsiner, защото споменатата грешка (зареждане на хранилище за ключове) - person weldsonandrade; 06.09.2012
comment
О, тогава може би това: mangled trusted.certs stackoverflow.com /questions/126798/ - person msEmmaMays; 06.09.2012
comment
Здравейте, не намирам този архив, бях в C:\Users\weldson\AppData\LocalLow\Sun\Java\Deployment\security и има само два архива (baseline.timestamp, baseline.versions). =/ - person weldsonandrade; 06.09.2012
comment
Може да не е във вашите лични AppData - може да е в главните директории за инсталиране на програмата - потърсете в целия си компютър файл, наречен "trusted.certs" - уверете се, че е в папка /Java/ - и го преименувайте, вместо да го изтривате (само в случай, че трябва да го върнете обратно) - person msEmmaMays; 06.09.2012
comment
Наистина претърсих всички компютри и нищо. Нямам този архив. - person weldsonandrade; 06.09.2012
comment
можете да опитате това, за да изведете списък на съдържанието и да видите дали може да прочете файла - keytool -list -v -keystore D:\releasekey.keystore - person msEmmaMays; 06.09.2012
comment
Опитах се да получа това: java.io.IOException: java.io.IOException: невалиден формат на keytore в sun.security.provider.javaKeyStore.engineLoad(JavaKeyStore.java:650) в sun.security.provider.javaKeyStore$JKS.engineLoad (JavaKeyStore.java:55) в java.security.Keystrore.load(KeyStore.java:1214) в sun.security.tools.KeyTool.doComands‹KeyTool.java:789) в sun.security.tools.KeyTool.run( KeyTool.java:340) на sun.security.tools.KeyTool.main(KeyTool.java:333) - person weldsonandrade; 06.09.2012
comment
редактирайте въпроса си, за да добавите информация - коментарите са гадни за такива неща - person msEmmaMays; 06.09.2012
comment
ред 650 е тук - docjar.com/html /api/sun/security/provider/ Проверява втория байт във файла, за да види дали е „0x01“ или „0x02“ - Ако отворите файла на хранилището за ключове в hexeditor и проверите този втори байт какво прави казва ли? Изглежда, че файлът ви е повреден - person msEmmaMays; 06.09.2012
comment
нека да продължим тази дискусия в чата - person weldsonandrade; 06.09.2012
comment
Съжалявам, че трябва да си лягам, разчетох грешно кода, той трябва да е първият байт (а не вторият) - на екранната ви снимка това е 0x8b - поради което се проваля. Изглежда, че файлът е повреден. Единствената друга възможност е, че използвате по-стара версия на Java от тази, която сте имали преди преформатирането - но имаше само две версии, така че това е малко вероятно) - person msEmmaMays; 06.09.2012
comment
Мисля, че файлът е повреден =/ - person weldsonandrade; 06.09.2012
comment
Версията на Java е по-нова. Получавам друга програма за възстановяване на данни, моля се за работа. - person weldsonandrade; 06.09.2012