2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Dans les projets, nous rencontrons souvent des scénarios dans lesquels le front-end Android utilise la clé publique fournie par le back-end pour chiffrer les données.Il faut faire attention au backend Javajava.util.Base64
Norme Base64 par défaut et Androidandroid.util.Base64
sont différents.
De plus, la norme d’algorithme RSA exige également un accord explicite entre le front-end et le back-end.
Exemple de code :
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);
}
}
Parmi eux, le résultat du chiffrement est codé avec Base64.NO_WRAP, la clé publique est décodée avec Base64.DEFAULT et l'algorithme de chiffrement est RSA/None/PKCS1Padding. Il existe de nombreux exemples de codes de cryptage RSA pour Android qui ne sont pas mentionnés sur Internet. Il existe également des problèmes avec le code généré par GPT, qui est enregistré ici.