2017-10-28 7 views
6

今、アンドロイドのデバッグキーの署名を取得しようとしています。窓パワーシェルのWindowsコマンドでウィンドウのcmdとPowerシェルでOpensslの結果が一致しない

(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= 

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 

2つの結果が一致しないました。

のcmd.exe:uQzK/Tk81BxWs8sBwQyvTLOWCKQ =

パワーシェル:Pz8 /のPwo/MDNuPyE/PYS/Pz8/Sm8K

なぜ? 何が起こったのですか?

答えて

4

これはPowerShellのオブジェクトパイプラインの結果であり、破損する可能性があるため、生のバイナリデータをPowerShellでパイプ処理しないでください。

PowerShellで生のバイナリデータをパイプ処理することは決して安全です。 PowerShellのパイプはオブジェクトとテキストのためのものであり、安全に自動的に文字列配列に変換できます。詳しい説明はthisをお読みください。

パイプを使用したため、powershellで計算した結果は間違っています。

cmd /C "keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl.exe sha1 -binary | openssl.exe base64" 

代わりに、ファイルへの/からの入力/出力を読み出し/書き込みすることができ、パイプを使用してこの問題を解決する一つの方法は、PowerShell内からcmd.exeのを使用することです。残念ながらopenssl.exe sha1には入力ファイルを指定するための-inパラメータがありません。そこで我々は、PowerShellのコマンドレット-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 

keytoolf1.binをファイルに書き込みます。次にopenssl.exe sha1f1.binから読み取り、f2.binに書き込みます。最後に、openssl.exe base64f2.binから読み出してo_with-ps.txt

+2

+1に書き込まれ、この問題はまた、PowerShellのレポの[この問題](https://github.com/PowerShell/PowerShell/issues/1908)の長さで議論されています。 –

関連する問題