2017-10-28 84 views
6

Bây giờ tôi sẽ nhận được chữ ký của khóa gỡ lỗi android.Kết quả mở rộng không khớp với cmd và vỏ nguồn của cửa sổ

Trong cửa sổ lệnh (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= 

Trong cửa sổ 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 

Hai kết quả không phù hợp.

cmd.exe: uQzK/Tk81BxWs8sBwQyvTLOWCKQ =

Power Shell: Pz8/PWO/MDNuPyE/PYS/Pz8/Sm8K

Tại sao? Điều gì đã xảy ra?

Trả lời

4

Đây là hệ quả của đường ống đối tượng trong PowerShell và bạn không bao giờ nên luồn dữ liệu nhị phân thô trong PowerShell vì nó sẽ bị hỏng.

Không bao giờ an toàn khi đưa dữ liệu nhị phân thô vào PowerShell. Các ống trong PowerShell dành cho các đối tượng và văn bản có thể được chuyển đổi tự động một cách an toàn thành một mảng chuỗi. Vui lòng đọc this để biết giải thích đầy đủ chi tiết.

Kết quả tính bằng powerhell là sai, vì bạn đã sử dụng đường ống. Một cách để khắc phục điều này là sử dụng cmd.exe từ bên trong PowerShell:

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

Thay vì sử dụng đường ống bạn có thể đọc/ghi vào/ra từ/đến các tập tin. Thật không may openssl.exe sha1 không có tham số -in để chỉ định tệp đầu vào. Do đó chúng ta cần phải sử dụng PowerShell-commandlet Start-Process, cho phép đọc và ghi các file với các thông số -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 viết để nộp f1.bin. Sau đó, openssl.exe sha1 đọc từ f1.bin và ghi vào f2.bin. Cuối cùng, openssl.exe base64 đọc từ f2.bin và ghi vào o_with-ps.txt

+2

+1 Vấn đề này cũng được thảo luận ở độ dài trong [vấn đề này] (https://github.com/PowerShell/PowerShell/issues/1908) trên repo PowerShell. –

Các vấn đề liên quan