Openssl结果在cmd和Windows的电源shell中不匹配

问题描述 投票:6回答:1

现在我要获得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 Powershell中

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 =

Power Shell:Pz8 / Pwo / MDNuPyE / Pys / Pz8 / Sm8K

为什么?发生了什么?

android windows powershell cmd
1个回答
4
投票

这是PowerShell中对象管道的结果,您永远不应该在PowerShell中管理原始二进制数据,因为它会被破坏。

在PowerShell中管理原始二进制数据永远不安全。 PowerShell中的管道用于可以安全地自动转换为字符串数组的对象和文本。请阅读this以获取详细信息的完整说明。

使用powershell计算的结果是错误的,因为您使用了管道。解决此问题的一种方法是在powershell中使用cmd.exe:

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 sha1f1.bin读取并写入f2.bin。最后,openssl.exe base64f2.bin读取并写入o_with-ps.txt

© www.soinside.com 2019 - 2024. All rights reserved.