Результат Openssl не соответствует cmd и Power shell windows
теперь я собираюсь получить подпись ключа отладки Android.
в команде windows (cmd.exe)
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl.exe sha1 -binary | openssl.exe base64
Enter keystore password: android
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore debug.keystore -destkeystore debug.keystore -deststoretype pkcs12".
uQzK/Tk81BxWs8sBwQyvTLOWCKQ=
в Windows Power Shell
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | .openssl.exe
sha1 -binary | .openssl.exe base64
Enter keystore password: android
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore debug.keystore -destkeystore debug.keystore -deststoretype pkcs12".
Pz8/Pwo/MDNuPyE/Pys/Pz8/Sm8K
два результата не совпадали.
cmd.exe:uQzK/Tk81BxWs8sBwQyvTLOWCKQ=
Силовая Оболочка: Pz8 / Pwo/MDNuPyE/Pys/Pz8 / Sm8K
почему? Что случилось?
1 ответов
это следствие конвейера объектов в PowerShell, и вы никогда не должны передавать необработанные двоичные данные в PowerShell, потому что они будут повреждены.
никогда не безопасно передавать необработанные двоичные данные в PowerShell. Каналы в PowerShell предназначены для объектов и текста, которые можно безопасно автоматически преобразовать в массив строк. Пожалуйста, прочитайте этой для полного объяснения с подробностями.
результат, рассчитанный с помощью powershell, неверен, потому что вы использовали трубы. Один из способов исправить это-использовать cmd.exe из powershell:
cmd /C "keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl.exe sha1 -binary | openssl.exe base64"
вместо использования каналов вы можете читать / записывать ввод / вывод из / в файлы. К сожалению, openssl.exe sha1 не имеет -in
параметр для указания входного файла. Поэтому нам нужно использовать powershell-commandlet Start-Process
, который позволяет читать и записывать файлы с параметрами -RedirectStandardInput
и -RedirectStandardOutput
:
keytool -exportcert -alias mykey -storepass wortwort -file f1.bin
Start-Process -FilePath openssl.exe -ArgumentList "sha1 -binary" -RedirectStandardInput f1.bin -RedirectStandardOutput f2.bin
Start-Process -FilePath openssl.exe -ArgumentList base64 -RedirectStandardInput f2.bin -RedirectStandardOutput o_with_ps.txt
keytool
запись в файл f1.bin
. Тогда openssl.exe sha1
читает f1.bin
и пишет к f2.bin
. Наконец,openssl.exe base64
читает f2.bin
и o_with-ps.txt