Κοινή χρήση τεχνολογίας

Πράγματα που πρέπει να σημειώσετε κατά τον από κοινού εντοπισμό σφαλμάτων κρυπτογράφησης RSA μεταξύ Android και Java backend

2024-07-12

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

Σε έργα, συναντάμε συχνά σενάρια όπου το front-end Android χρησιμοποιεί το δημόσιο κλειδί που παρέχεται από το back-end για την κρυπτογράφηση δεδομένων.Πρέπει να δώσετε προσοχή στο backend της Javajava.util.Base64Προεπιλεγμένο πρότυπο Base64 και Androidandroid.util.Base64είναι διαφορετικά.
Επιπλέον, το πρότυπο αλγόριθμου RSA απαιτεί επίσης ρητή συμφωνία μεταξύ του μπροστινού και του πίσω άκρου.

Δείγμα κώδικα:

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

Μεταξύ αυτών, το αποτέλεσμα κρυπτογράφησης κωδικοποιείται με Base64.NO_WRAP, το δημόσιο κλειδί αποκωδικοποιείται με Base64.DEFAULT και ο αλγόριθμος κρυπτογράφησης είναι RSA/None/PKCS1Padding. Υπάρχουν πολλά δείγματα κωδικών κρυπτογράφησης RSA για Android που δεν αναφέρονται στο Διαδίκτυο Υπάρχουν επίσης προβλήματα με τον κώδικα που δημιουργείται από το GPT, ο οποίος καταγράφεται εδώ.