Condivisione della tecnologia

Cose da tenere presente durante il debug congiunto della crittografia RSA tra i backend Android e Java

2024-07-12

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

Nei progetti incontriamo spesso scenari in cui il front-end Android utilizza la chiave pubblica fornita dal back-end per crittografare i dati.È necessario prestare attenzione al backend Javajava.util.Base64Standard Base64 predefinito e Androidandroid.util.Base64sono diversi.
Inoltre, lo standard dell'algoritmo RSA richiede anche un accordo esplicito tra il front-end e il back-end.

Codice d'esempio:

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

Tra questi, il risultato della crittografia è codificato con Base64.NO_WRAP, la chiave pubblica è decodificata con Base64.DEFAULT e l'algoritmo di crittografia è RSA/None/PKCS1Padding. Ci sono molti codici di esempio di crittografia RSA per Android che non sono menzionati in Internet. Ci sono anche problemi con il codice generato da GPT, che viene qui registrato.