Java: ¿Cómo puedo generar PrivateKey de una cadena?
Estoy intentando codificar un mensaje con SH1 RSA
pero no tengo ninguna experiencia con el tema de la seguridad excepto alguna imformación básica sobre RSA
. He dado una clave privada como String
. He manejado escribir el bloque siguiente del código para hacer el trabajo pero no estoy seguro si estoy haciendo el trabajo seguro y derecho.
No soy un experto, pero poner mi privete clave como cadena en el código no seguro supongo. ¿Puede alguien guiarme?
- ¿Cómo la emulación de tarjeta basada en software (HCE) garantiza la seguridad NFC?
- ¿Qué tan seguro acceder a mi aplicación de Android con facebook-id?
- Es el partido (Uri) de la clase UriMatcher reentrante?
- Android RSA Generación de pares de claves - ¿Debo usar Java estándar / Bouncy Castle / Spongy Castle / JSch / Other?
- Android: Determinar el tipo de seguridad de las redes wifi en el rango (sin conectarse a ellos)
String privateKeyString = "mykeyhere..."; byte[] privateKeyBytes = privateKeyString.getBytes(); String encodedPrivateKey = Base64.encodeToString(privateKeyBytes, Base64.URL_SAFE); KeyFactory factory = KeyFactory.getInstance(RSA); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encodedPrivateKey.getBytes()); RSAPrivateKey privateKey = (RSAPrivateKey) factory.generatePrivate(keySpec); Signature instance = Signature.getInstance(ALGORITHM); instance.initSign(privateKey); instance.update(content.getBytes()); return new String(instance.sign());
Mi clave privada está en forma como:
"-----BEGIN PRIVATE KEY-----\n"+ "MIIE...\n"+ "cH0iRj...\n"+ "O0Hhj...\n"+ . . . "fG6...\n"+ "B6/hF...\n"+ "3Mq38...\n"+ "-----END PRIVATE KEY-----\n"
- Pregunta sobre la seguridad del depurador
- SecurityException - Nombre del paquete de llamadas desconocido -Android 6.0.1
- Cómo Hash String usando SHA-1 con la clave?
- Cómo proteger las preferencias compartidas de Android?
- ¿Qué protege las contraseñas de AccountManager de Android de ser leídas por otras aplicaciones?
- ¿Cómo se puede comprobar el permiso en tiempo de ejecución sin lanzar SecurityException?
- Comprobación de que el mensaje provenía de un punto específico de aplicación / punto final
- Android Keystore - ¿se puede recuperar una clave de usuario por root si se establece en ese usuario?
Su formato clave es una clave privada codificada en PKCS8 codificada en base64 sin cifrar. Aquí hay un ejemplo de cómo decodificarlo en una clave privada. (No se preocupe por la seguridad de la clave privada en este ejemplo, es sólo un tiro para el ejemplo).
import java.io.*; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.spec.PKCS8EncodedKeySpec; import android.util.Base64; public class ReadPKCS8Pem { private final static String PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----\n" + "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAM7t8Ub1DP+B91NJ\n" + "nC45zqIvd1QXkQ5Ac1EJl8mUglWFzUyFbhjSuF4mEjrcecwERfRummASbLoyeMXl\n" + "eiPg7jvSaz2szpuV+afoUo9c1T+ORNUzq31NvM7IW6+4KhtttwbMq4wbbPpBfVXA\n" + "IAhvnLnCp/VyY/npkkjAid4c7RoVAgMBAAECgYBcCuy6kj+g20+G5YQp756g95oN\n" + "dpoYC8T/c9PnXz6GCgkik2tAcWJ+xlJviihG/lObgSL7vtZMEC02YXdtxBxTBNmd\n" + "upkruOkL0ElIu4S8CUwD6It8oNnHFGcIhwXUbdpSCr1cx62A0jDcMVgneQ8vv6vB\n" + "/YKlj2dD2SBq3aaCYQJBAOvc5NDyfrdMYYTY+jJBaj82JLtQ/6K1vFIwdxM0siRF\n" + "UYqSRA7G8A4ga+GobTewgeN6URFwWKvWY8EGb3HTwFkCQQDgmKtjjJlX3BotgnGD\n" + "gdxVgvfYG39BL2GnotSwUbjjce/yZBtrbcClfqrrOWWw7lPcX1d0v8o3hJfLF5dT\n" + "6NAdAkA8qAQYUCSSUwxJM9u0DOqb8vqjSYNUftQ9dsVIpSai+UitEEx8WGDn4SKd\n" + "V8kupy/gJlau22uSVYI148fJSCGRAkBz+GEHFiJX657YwPI8JWHQBcBUJl6fGggi\n" + "t0F7ibceOkbbsjU2U4WV7sHyk8Cei3Fh6RkPf7i60gxPIe9RtHVBAkAnPQD+BmND\n" + "By8q5f0Kwtxgo2+YkxGDP5bxDV6P1vd2C7U5/XxaN53Kc0G8zu9UlcwhZcQ5BljH\n" + "N24cUWZOo+60\n" + "-----END PRIVATE KEY-----"; public static void main(String[] args) throws Exception { // Read in the key into a String StringBuilder pkcs8Lines = new StringBuilder(); BufferedReader rdr = new BufferedReader(new StringReader(PRIVATE_KEY)); String line; while ((line = rdr.readLine()) != null) { pkcs8Lines.append(line); } // Remove the "BEGIN" and "END" lines, as well as any whitespace String pkcs8Pem = pkcs8Lines.toString(); pkcs8Pem = pkcs8Pem.replace("-----BEGIN PRIVATE KEY-----", ""); pkcs8Pem = pkcs8Pem.replace("-----END PRIVATE KEY-----", ""); pkcs8Pem = pkcs8Pem.replaceAll("\\s+",""); // Base64 decode the result byte [] pkcs8EncodedBytes = Base64.decode(pkcs8Pem, Base64.DEFAULT); // extract the private key PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8EncodedBytes); KeyFactory kf = KeyFactory.getInstance("RSA"); PrivateKey privKey = kf.generatePrivate(keySpec); System.out.println(privKey); } }
- Independiente checkableBehavior = "solo" grupos en NavigationView / DrawerLayout
- RecyclerView: Las clases internas no pueden tener una declaración estática