アンドロイドデバイスにインストールされている別のアプリケーションの証明書sha256ハッシュを取得するにはどうすればよいですか? How to get APK signing signature?に記載されているソリューションを使用しています。しかし、それは証明書のハッシュではないような署名を与えています。Androidアプリケーションの証明書
0
A
答えて
1
名前にもかかわらず、それは証明書の公開部分です。
CWAC-Securityライブラリには、この情報のSHA-256ハッシュを計算するa SignatureUtils
class with a getSignatureHash()
methodがあります。結果は、Javaのkeytool
を使用してキーストアからハッシュをダンプした場合と同じ結果になります。
コアコード
はかなり短いです:あなたはこのような何かを試すことができますpublic static String getSignatureHash(Context ctxt, String packageName)
throws NameNotFoundException, NoSuchAlgorithmException {
MessageDigest md=MessageDigest.getInstance("SHA-256");
Signature sig=
ctxt.getPackageManager()
.getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures[0];
return(toHexStringWithColons(md.digest(sig.toByteArray())));
}
// based on https://stackoverflow.com/a/2197650/115145
public static String toHexStringWithColons(byte[] bytes) {
char[] hexArray=
{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
'C', 'D', 'E', 'F' };
char[] hexChars=new char[(bytes.length * 3) - 1];
int v;
for (int j=0; j < bytes.length; j++) {
v=bytes[j] & 0xFF;
hexChars[j * 3]=hexArray[v/16];
hexChars[j * 3 + 1]=hexArray[v % 16];
if (j < bytes.length - 1) {
hexChars[j * 3 + 2]=':';
}
}
return new String(hexChars);
}
0
:
PackageManager packageManager = getPackageManager();
int flag = PackageManager.GET_SIGNATURES;
PackageInfo packageInfo = null;
try {
packageInfo = packageManager.getPackageInfo(packageName, flag);
byte[] certificates = packageInfo.signatures[0].toByteArray();
InputStream input = new ByteArrayInputStream(certificates);
CertificateFactory factory = CertificateFactory.getInstance("X509");
X509Certificate certificate = (X509Certificate) factory.generateCertificate(input);
MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
byte[] publicKey = messageDigest.digest(certificate.getEncoded());
} catch (PackageManager.NameNotFoundException exception) {
exception.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e2) {
e2.printStackTrace();
}
+0
証明書のSHA1またはSHA256ハッシュを取得したいのですが、取得できません。 – Ammad
関連する問題
- 1. Android証明書の問題
- 2. Android証明書のインストール
- 3. 証明書例外Websphereアプリケーション
- 4. 証明書、アプリケーションID、プロビジョニングプロファイル
- 5. J2MEアプリケーション用デジタル証明書
- 6. Azure ADアプリケーション証明書
- 7. AndroidマニュアルX509証明書チェーンの検証
- 8. 証明書パーサーin android
- 9. マイクロソフトのHealthVault証明書PHPベースのアプリケーション
- 10. Javaアプリケーションの証明書の失効
- 11. Androidアプリケーションで個人証明書を使用する
- 12. アプリケーション証明書QuickbooksとVBAのInavlidエラー
- 13. Android、システムのプライベート/パブリック証明書にアクセス
- 14. SHA-1証明書のAndroidサポート
- 15. Android Webviewで証明書の固定化
- 16. Java証明書とSSL証明書
- 17. android証明書ストアからクライアント証明書を取得する方法
- 18. Android証明書とは何ですか?
- 19. AndroidスタジオHTTPSとSSL証明書
- 20. Android SSLソケット証明書失効確認
- 21. サービスのみのWCF証明書認証(クライアント証明書なし)
- 22. iOSアプリケーションでデフォルトのSSL証明書の検証が必要
- 23. 証明書の検証が
- 24. バイパス証明書の検証
- 25. Windows証明書ストアで証明書を明確に認識
- 26. アップルデベロッパー証明書
- 27. SSL証明書
- 28. SSL証明書
- 29. HTML証明書
- 30. SSL証明書
おかげで多くのことを、私はこの非常に便利を見つけました。 – Ammad