이 앱 내부에서 앱 인증서의 지문을 얻는 방법은 무엇입니까? 신청서가 본인의 인증서로 부르는지 또는 재 포장/해킹되었는지 확인하고 싶습니다.android app에서 인증서 지문을 받으십시오.
여기 용액의 일부가 발견되었습니다 : Get Certificate from Android Application. 이제 질문은 인증서의 지문을 확인하는 방법입니다.
이 앱 내부에서 앱 인증서의 지문을 얻는 방법은 무엇입니까? 신청서가 본인의 인증서로 부르는지 또는 재 포장/해킹되었는지 확인하고 싶습니다.android app에서 인증서 지문을 받으십시오.
여기 용액의 일부가 발견되었습니다 : Get Certificate from Android Application. 이제 질문은 인증서의 지문을 확인하는 방법입니다.
여기에 넣습니다.이 함수는 keytool과 같은 결과를 나타냅니다.
private String getCertificateSHA1Fingerprint() {
PackageManager pm = mContext.getPackageManager();
String packageName = mContext.getPackageName();
int flags = PackageManager.GET_SIGNATURES;
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName, flags);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Signature[] signatures = packageInfo.signatures;
byte[] cert = signatures[0].toByteArray();
InputStream input = new ByteArrayInputStream(cert);
CertificateFactory cf = null;
try {
cf = CertificateFactory.getInstance("X509");
} catch (CertificateException e) {
e.printStackTrace();
}
X509Certificate c = null;
try {
c = (X509Certificate) cf.generateCertificate(input);
} catch (CertificateException e) {
e.printStackTrace();
}
String hexString = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] publicKey = md.digest(c.getEncoded());
hexString = byte2HexFormatted(publicKey);
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
} catch (CertificateEncodingException e) {
e.printStackTrace();
}
return hexString;
}
public static String byte2HexFormatted(byte[] arr) {
StringBuilder str = new StringBuilder(arr.length * 2);
for (int i = 0; i < arr.length; i++) {
String h = Integer.toHexString(arr[i]);
int l = h.length();
if (l == 1) h = "0" + h;
if (l > 2) h = h.substring(l - 2, l);
str.append(h.toUpperCase());
if (i < (arr.length - 1)) str.append(':');
}
return str.toString();
}
죄송합니다. 제 솔루션보다 빨리 빨랐습니다. 시간 내 주셔서 감사합니다.
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PackageManager pm = this.getPackageManager();
String packageName = this.getPackageName();
int flags = PackageManager.GET_SIGNATURES;
PackageInfo packageInfo = null;
try {
packageInfo = pm.getPackageInfo(packageName, flags);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Signature[] signatures = packageInfo.signatures;
byte[] cert = signatures[0].toByteArray();
InputStream input = new ByteArrayInputStream(cert);
CertificateFactory cf = null;
try {
cf = CertificateFactory.getInstance("X509");
} catch (CertificateException e) {
e.printStackTrace();
}
X509Certificate c = null;
try {
c = (X509Certificate) cf.generateCertificate(input);
} catch (CertificateException e) {
e.printStackTrace();
}
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] publicKey = md.digest(c.getPublicKey().getEncoded());
StringBuffer hexString = new StringBuffer();
for (int i=0;i<publicKey.length;i++) {
String appendString = Integer.toHexString(0xFF & publicKey[i]);
if(appendString.length()==1)hexString.append("0");
hexString.append(appendString);
}
Log.d("Example", "Cer: "+ hexString.toString());
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
}
}
[응용 프로그램 라이선스] (http://developer.android.com/guide/publishing/licensing.html)를 살펴보십시오. 앱이 지급 된 경우에만 작동합니다. – Felix
내 앱이 유료입니다. 나는 재 포장 된 adware 앱에 대해 들었고 (수정 된 광고 게시자 ID) 수정하여 시장에 보냈습니다. – piotrpo
은 서명 지문인가 아니면 서명인가? 'keytool -printcert-file sign.rsa'에 의해 생성 된 것과 다릅니다. – Zennichimaro
좋은 일 ................ –
안녕하세요. 디버그 kestore로 작업. 그러나 서명 된 apk와 함께 사용하면이 오류가 발생합니다. java.lang.NoSuchMethodError : Lorg/apache/http/conn/params/ConnManagerParams 클래스의 정적 메서드 setTimeout (Le/a/b/c/d; 또는 슈퍼 클래스 ('org.apache.http.conn.params.ConnManagerParams'선언은 /system/framework/ext.jar에 나타납니다) – arjunkn
이 오류는 키 저장소와 관련이 없다고 생각합니다. 앱의 다른 코드가이 예외를 발생시킬 수 있습니다. 빈 프로젝트에서 키 저장소를 사용하여 기능을 확인하십시오. – matreshkin