Compartir tecnología

Cosas a tener en cuenta al depurar conjuntamente el cifrado RSA entre los backends de Android y Java

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

En proyectos, a menudo nos encontramos con escenarios en los que el front-end de Android utiliza la clave pública proporcionada por el back-end para cifrar datos.Es necesario prestar atención al backend de Java.java.util.Base64Estándar Base64 predeterminado y Androidandroid.util.Base64son diferentes.
Además, el estándar del algoritmo RSA también requiere un acuerdo explícito entre el front-end y el back-end.

Código de muestra:

import android.util.Base64;

import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.spec.X509EncodedKeySpec;

public class RSACrypto {

    public static final String PUB_KEY = "xxxxxxxxxxxxxx你的后端公钥";


    public static PublicKey getPublicKey() throws Exception {
        byte[] keyBytes = Base64.decode(PUB_KEY, Base64.DEFAULT);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePublic(keySpec);
    }

    public static String publicEncrypt(PublicKey publicKey, String encrypted) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] data = cipher.doFinal(encrypted.getBytes(StandardCharsets.UTF_8));
        return Base64.encodeToString(data, Base64.NO_WRAP);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

Entre ellos, el resultado del cifrado está codificado con Base64.NO_WRAP, la clave pública está decodificada con Base64.DEFAULT y el algoritmo de cifrado es RSA/None/PKCS1Padding. Hay muchos códigos de muestra de cifrado RSA para Android que no se mencionan en Internet. También hay problemas con el código generado por GPT, que se registra en este documento.