¿Cómo está comprobando Google SHA1 y el nombre del paquete en las llamadas de la API?
Al registrar una aplicación de Android en la consola de la API para acceder a la API de Google, debes introducir la huella dactilar de los certificados SHA1 de tus aplicaciones y el nombre del paquete de la aplicación.
Ahora me preguntaba cómo Google podría verificar que estos valores son correctos cuando las llamadas api son simples peticiones HTTP (en el caso más simple, cuando no se utiliza su cliente API, que podría añadir algunos valores de encabezado)? Debe proporcionar su clave de API al realizar una llamada de API, pero esto no demuestra que los valores introducidos son correctos.
- Protege el acceso a la URL de la API mediante hash en la aplicación para Android
- Android donde guardar datos personales?
- No se pudo enviar la solicitud de Amazon AppStore: "La información sensible como la contraseña se repite en texto sin cifrado"
- ¿Qué herramientas existen que ofrecen protección apk para android (contra la inversión y el reenvasado)?
- ¿Cómo funciona la verificación de claves API de Google Maps para Android v2?
- Evitar que el usuario tome fotos de la pantalla de la aplicación
- En seguridad de facturación de aplicaciones
- ¿Es seguro guardar los tokens de acceso / actualización de Oauth2 en las Preferencias compartidas de Android?
- ¿Cuáles son posibles problemas de seguridad en Android
- ¿Qué sucede mientras se mueve la aplicación a la tarjeta SD en Android
- Lee la huella digital de la computadora RSA desde Android
- ¿Cómo almacenar de forma segura el token de acceso y el secreto en Android?
- Falla de confiabilidad de la aplicación en la aplicación v3
One Solution collect form web for “¿Cómo está comprobando Google SHA1 y el nombre del paquete en las llamadas de la API?”
Usted puede obtener el nombre del paquete, así como la huella digital sha 1 de la aplicación instalada con bastante facilidad.
private void printSha1() { List<ApplicationInfo> mAppList = getPackageManager().getInstalledApplications(0); for (ApplicationInfo info :mAppList) { Log.d(TAG, "Package Name: " + info.packageName); Log.d(TAG, "Sha1: " + getCertificateSHA1Fingerprint(info.packageName)); } } private String getCertificateSHA1Fingerprint(String packageName) { PackageManager pm = getPackageManager(); 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(); }
Si ejecuta este código imprimirá el nombre del paquete y su impresión sha 1. Éstas son las dos cosas que usted proporciona mientras que crea la llave de la API, así que Google traza estas dos cosas contra la llave que genera.
Como puede ver su posible acceso al nombre del paquete y su impresión SHA 1, la otra cosa restante es la clave API que proporciona a la biblioteca u otra aplicación necesaria (Google Play Service) a través de su código oa través de xml (Manifest, xml config archivo).
Así que cada vez que Google le sirve algo, puede comprobar el mapeo relevante que generó cuando generó la clave desde la consola del API.
El código para el nombre del paquete se toma desde aquí
- ¿Cuál es la diferencia entre Eclipse "Importar" y "Crear proyecto de fuente existente" para proyectos de Android?
- Cómo averiguar si la actividad es la última actividad en la pila